home *** CD-ROM | disk | FTP | other *** search
/ Shareware Super Platinum 8 / Shareware Super Platinum 8.iso / mac / DATABASE / GENSCR.ZIP;1 / GENSCRNX.PRG < prev    next >
Encoding:
Text File  |  1993-08-10  |  142.6 KB  |  5,141 lines

  1. ***************************************************************************
  2. *
  3. * Procedure file: GENSCRNX.PRG
  4. *         System: GenScrnX
  5. *        Version: 1.6b
  6. *         Author: Ken R. Levy
  7. *        Company: Jet Propulsion Laboratory
  8. *      Copyright: None (Public Domain)
  9. *
  10. ***************************************************************************
  11. *
  12. * GENSCRNX - Screen Database Generator.
  13. *
  14. * Description:
  15. * This program generates database from objects designed and built with
  16. * FoxPro screen builder.
  17. *
  18. * Notes:
  19. * In this program, for clarity/readability reasons, variable names
  20. * are used that are longer than 10 characters.  Note, however, that only
  21. * the first 10 characters are significant.
  22. *
  23. PARAMETERS m.projdbf,m.recno,m.dummy
  24. PRIVATE m.projdbf,m.recno,m.dummy
  25. PRIVATE m.gstatus,m.gsx_mode,m.fconfigfp,m.cr,m.lf,m.cr_lf,m.null
  26. PRIVATE m.genscrn,m.genscrnx,m.warnings,m.gsxversion,m.mvcount
  27. PRIVATE m.transport,m.transportx,m.ftrndrv1,m.ftrndrv2
  28. PRIVATE m.pathfox,m.fgenscx,m.fupdspr,m.ffoxscx,m.ffoxscx2,m.projpath
  29. PRIVATE m.fscxbase,m.fscxdata,m.fsprout,m.fspxout,m.fsprout2
  30. PRIVATE m.spxout2,m.fsprerr,m.compspr,m.dispspr,m.autorun
  31. PRIVATE m.platonly,m.autohalt,m.outtxt,m.lastselect
  32. PRIVATE m.inclibs,m.baslibs,m.fromproj,m.fcountadj,m.fnctnames
  33. PRIVATE m.lastonerror,m.lastsetcomp,m.lastsetexac,m.lastsetpath
  34. PRIVATE m.lastsetsfty,m.lastsetexcl,m.lastsetudfp,m.lastsetcur,m.lastmemow
  35. PRIVATE m.c_defobj,m.c_basobj,m.c_insobj,m.c_insscx,m.c_inclib,m.c_deflib
  36. PRIVATE m.c_baslib,m.c_trntxt,m.c_memvar,m.c_instxt,m.c_delete,m.c_delobj
  37. PRIVATE m.c_if,m.c_size,m.c_nosize,m.c_svsize,m.c_svpict,m.c_basbefore
  38. PRIVATE m.c_defobj,m.c_group,m.c_default,m.c_name,m.p_name,m.s_para
  39. PRIVATE m.c_pjx_set,m.c_set,m.c_insert,m.p_insert,m.c_prg,m.c_outfile
  40. PRIVATE m.c_endtxt,m.c_function,m.c_endfnct,m.c_method,m.c_endmthd
  41. PRIVATE m.c_nogen,m.c_noxgen,m.c_section3,m.c_autorun,m.c_noautorun
  42. PRIVATE m.c_compspr,m.c_nocompspr,m.c_dispspr,m.c_nodispspr,m.c_genscrnx
  43. PRIVATE m.m_deflib,m.m_defobj,m.m_basobj,m.m_instxt,m.m_delete
  44. PRIVATE m.m_if,m.m_size,m.m_nosize,m.m_svsize,m.m_svpict,m.m_basbefore
  45. PRIVATE m.m_default,m.m_errline,m.m_section3,m.m_method
  46. PRIVATE m.scx_name,m.memline,m.i,m.newsetpath,m.pjxset,m.eval_cmnt
  47. PRIVATE m.r_projbase,m.r_scxdata,m.platform_,m.cplatform_,m.splatform_
  48. PRIVATE m.lib_mode,m.gen_mode,m.xgen_mode,m.scxcount,m.allplatforms,m.drv_no
  49. PRIVATE m.msg1,m.msg2,m.msg3,m.nextfile,m.memtemp1,m.memtemp2,m.memtemp3
  50. PRIVATE m.c_dlgface,m.c_dlgsize,m.c_dlgstyle,m.badchars,m.stdascii
  51. DIMENSION a_fscxdrv(8),a_scxdrv(1,8),a_scxdrvs(8),a_scxdrvm(8),a_c_scxdrv(8)
  52. DIMENSION a_fsprdrv(6),a_sprdrv(1,6),a_sprdrvs(6),a_sprdrvm(8),a_c_sprdrv(6)
  53.  
  54. m.gsxversion='1.6a'
  55. _FOX25=('2.5'$VERSION())
  56. _FOX25REV=IIF(_FOX25,SUBSTR(VERSION(),AT('2.5',VERSION())+3,1),'')
  57. IF .NOT._FOX25
  58.   _DOS=.T.
  59.   _WINDOWS=.F.
  60.   _MAC=.F.
  61.   _UNIX=.F.
  62. ENDIF
  63. DO CASE
  64.   CASE _WINDOWS
  65.     m.cplatform_='WINDOWS'
  66.   CASE _MAC
  67.     m.cplatform_='MAC'
  68.   CASE _UNIX
  69.     m.cplatform_='UNIX'
  70.   OTHERWISE
  71.     m.cplatform_='DOS'
  72. ENDCASE
  73. m.cplatform_=PADR(m.cplatform_,8)
  74. IF TYPE('m.recno')#'N'
  75.   m.recno=0
  76. ENDIF
  77. m.gsx_mode=m.recno>=2.AND.ATC('.PJX',m.projdbf)>0
  78. m.gstatus=0
  79. m.warnings=0
  80. m.pathfox=SYS(2004)
  81. m.cr=CHR(13)
  82. m.lf=CHR(10)
  83. m.cr_lf=m.cr+m.lf
  84. m.null=CHR(0)
  85. DIMENSION a_file_ext(4)
  86. a_file_ext(1)='.EXE'
  87. a_file_ext(2)='.APP'
  88. a_file_ext(3)='.PRG'
  89. a_file_ext(4)='.FXP'
  90. m.lastselect=SELECT()
  91. m.lastsetpath=SET('PATH')
  92. m.fconfigfp=SYS(2019)
  93. IF FILE(m.fconfigfp)
  94.   CREATE CURSOR CONFIGFP (FP M)
  95.   INSERT BLANK
  96.   APPEND MEMO FP FROM (m.fconfigfp) OVERWRITE
  97.   REPLACE FP WITH evltxt(FP)
  98. ELSE
  99.   m.fconfigfp=''
  100. ENDIF
  101. m.mvcount=configfp('MVCOUNT','256')
  102. IF VAL(m.mvcount)<512
  103.   =warning("'MVCOUNT="+m.mvcount+"' should be set to at least 512 in "+;
  104.            SYS(2019))
  105. ENDIF
  106. m.genscrnx=IIF(TYPE('_GENSCRNX')=='C',UPPER(_GENSCRNX),configfp('GENSCRNX','ON'))
  107. m.genscrn=add_fext(configfp('_GENSCRNX',m.pathfox+'GENSCRN.PRG'))
  108. m.ffoxscx=configfp('_FOXSCX',m.pathfox+'FOXSCX.DBF')
  109. IF .NOT.EMPTY(m.ffoxscx).AND..NOT.'.'$m.ffoxscx
  110.   m.ffoxscx=m.ffoxscx+'.DBF'
  111. ENDIF
  112. IF TYPE('m.projdbf')#'C'
  113.   m.i=openfoxscx()
  114.   IF USED('CONFIGFP')
  115.     USE IN CONFIGFP
  116.   ENDIF
  117.   IF .NOT.m.i
  118.     RETURN .F.
  119.   ENDIF
  120.   m.memline="PLATFORM=='"+m.cplatform_+"'"
  121.   SET FILTER TO &memline
  122.   RETURN .T.
  123. ENDIF
  124. IF .NOT.m.gsx_mode
  125.   m.transport=add_fext(configfp('_TRANSPRTX',m.pathfox+'TRANSPRT.PRG'))
  126.   m.ftrndrv1=add_fext(configfp('_trndrv1',''))
  127.   m.ftrndrv2=add_fext(configfp('_trndrv2',''))
  128.   IF USED('CONFIGFP')
  129.     USE IN CONFIGFP
  130.   ENDIF
  131.   IF FILE(m.ftrndrv1)
  132.     DO (m.ftrndrv1) WITH m.projdbf,m.recno,m.dummy
  133.     IF m.gstatus=-2
  134.       RETURN 0
  135.     ENDIF
  136.     IF m.gstatus=-1
  137.       RETURN -1
  138.     ENDIF
  139.   ENDIF
  140.   IF .NOT.FILE(m.transport)
  141.     RETURN -1
  142.   ENDIF
  143.   m.transport=trimext(m.transport)
  144.   RELEASE ALL LIKE ?_*
  145.   SET PATH TO (m.pathfox)
  146.   macrofnct='m.gstatus='+trimpath(m.transport)+'(m.projdbf,m.recno,m.dummy)'
  147.   ¯ofnct
  148.   IF EMPTY(m.lastsetpath)
  149.     SET PATH TO
  150.   ELSE
  151.     SET PATH TO (m.lastsetpath)
  152.   ENDIF
  153.   IF FILE(m.ftrndrv2)
  154.     DO (m.ftrndrv2) WITH m.projdbf,m.recno,m.dummy
  155.   ENDIF
  156.   RETURN m.gstatus
  157. ENDIF
  158. IF m.genscrnx=='OFF'
  159.   IF USED('CONFIGFP')
  160.     USE IN CONFIGFP
  161.   ENDIF
  162.   IF .NOT.FILE(m.genscrn)
  163.     RETURN 2
  164.   ENDIF
  165.   RELEASE ALL LIKE ?_*
  166.   RELEASE ALL LIKE f*
  167.   RELEASE ALL LIKE last*
  168.   DO (m.genscrn) WITH m.projdbf,m.recno
  169.   RETURN m.gstatus
  170. ENDIF
  171. m.fgenscx=configfp('_GENSCX','GENSCX')
  172. m.fupdspr=configfp('_UPDSPR','UPDSPR')
  173. FOR m.i = 1 TO 8
  174.   a_scxdrvm(m.i)=0
  175.   a_fscxdrv(m.i)=add_fext(configfp('_SCXDRV'+STR(m.i,1),''))
  176.   IF m.i>6
  177.     LOOP
  178.   ENDIF
  179.   a_sprdrvm(m.i)=0
  180.   a_fsprdrv(m.i)=add_fext(configfp('_SPRDRV'+STR(m.i,1),''))
  181. ENDFOR
  182. m.compspr=IIF(TYPE('_COMPSPR')=='C',UPPER(_COMPSPR),;
  183.           configfp('COMPSPR','OFF'))
  184. m.dispspr=IIF(TYPE('_DISPSPR')=='C',UPPER(_DISPSPR),;
  185.           configfp('DISPSPR','OFF'))
  186. m.autorun=IIF(TYPE('_AUTORUN')=='C',UPPER(_AUTORUN),;
  187.           configfp('AUTORUN','OFF'))
  188. m.platonly=IIF(TYPE('_PLATONLY')=='C',UPPER(_PLATONLY),;
  189.            configfp('PLATONLY','OFF'))
  190. m.autohalt=IIF(TYPE('_AUTOHALT')=='C',UPPER(_AUTOHALT),;
  191.            configfp('AUTOHALT','ON'))
  192. m.outtxt=IIF(TYPE('_OUTTXT')=='C',UPPER(_OUTTXT),;
  193.            configfp('OUTTXT','OFF'))
  194. SET ESCAPE OFF
  195. m.lastonerror=ON('ERROR')
  196. ON ERROR DO errorhnd WITH ERROR(),MESSAGE(),PROGRAM(),LINENO(),MESSAGE(1)
  197. m.lastsetcomp=SET('COMPATIBLE')
  198. SET COMPATIBLE OFF
  199. m.lastsetexac=SET('EXACT')
  200. SET EXACT OFF
  201. m.lastsetsfty=SET('SAFETY')
  202. SET SAFETY OFF
  203. m.lastsetexcl=SET('EXCLUSIVE')
  204. SET EXCLUSIVE ON
  205. m.lastsetudfp=SET('UDFPARMS')
  206. SET UDFPARMS TO VALUE
  207. SET CURSOR OFF
  208. m.lastmemow=SET('MEMOWIDTH')
  209. SET MEMOWIDTH TO 254
  210. ACTIVATE SCREEN
  211. IF WEXIST('_weditfile')
  212.   RELEASE WINDOW _weditfile
  213. ENDIF
  214. IF _WINDOWS
  215.   SET MESSAGE TO ''
  216. ENDIF
  217. m.c_defobj='*:DEFOBJ'
  218. m.c_basobj='*:BASOBJ'
  219. m.c_insobj='*:INSOBJ'
  220. m.c_insscx='*:INSSCX'
  221. m.c_inclib='*:INCLIB'
  222. m.c_deflib='*:DEFLIB'
  223. m.c_baslib='*:BASLIB'
  224. m.c_instxt='*:INSTXT'
  225. m.c_trntxt='*:TRNTXT'
  226. m.c_memvar='*:MEMVAR'
  227. FOR m.i = 1 TO 8
  228.   a_c_scxdrv(m.i)='*:SCXDRV'+STR(i,1)
  229.   a_scxdrvs(m.i)=0
  230.   IF m.i>6
  231.     LOOP
  232.   ENDIF
  233.   a_c_sprdrv(m.i)='*:SPRDRV'+STR(i,1)
  234.   a_sprdrvs(m.i)=0
  235. ENDFOR
  236. m.c_delete='*:DELETE'
  237. m.c_delobj='*:DELOBJ'
  238. m.c_if='*:IF'
  239. m.c_size='*:SIZE'
  240. m.c_nosize='*:NOSIZE'
  241. m.c_svsize='*:SAVESIZE'
  242. m.c_svpict='*:SAVEPICT'
  243. m.c_basbefore='*:BASBEFORE'
  244. m.c_group='*:GROUP'
  245. m.c_default='*:DEFAULT'
  246. m.c_nogen='*:NOGEN'
  247. m.c_noxgen='*:NOXGEN'
  248. m.c_compspr='*:COMPSPR'
  249. m.c_nocompspr='*:NOCOMPSPR'
  250. m.c_dispspr='*:DISPSPR'
  251. m.c_nodispspr='*:NODISPSPR'
  252. m.c_autorun='*:AUTORUN'
  253. m.c_noautorun='*:NOAUTORUN'
  254. m.c_genscrnx='*:GENSCRNX'
  255. m.c_insert='#:INSERT'
  256. m.p_insert='#INSE'
  257. m.c_name='*:NAME'
  258. m.p_name='#NAME'
  259. m.s_para='PARA'
  260. m.c_prg='*:PRG'
  261. m.c_outfile='*:OUTFILE'
  262. m.c_pjxset='*:PJXSET'
  263. m.c_set='*:SET'
  264. m.c_section3='#:SECTION 3'
  265. m.c_endtxt='*:ENDTXT'
  266. m.c_function='*:FUNCTION'
  267. m.c_method='*:METHOD'
  268. m.c_endfnct='*:ENDFNCT'
  269. m.c_endmthd='*:ENDMTHD'
  270. m.m_deflib='*-:DEFLIB'
  271. m.m_defobj='*-:DEFOBJ'
  272. m.m_basobj='*-:BASOBJ'
  273. m.m_instxt='*-:INSTXT'
  274. m.m_delete='*-:DELETE'
  275. m.m_if='*-:IF'
  276. m.m_size='*-:SIZE'
  277. m.m_nosize='*-:NOSIZE'
  278. m.m_svsize='*-:SAVESIZE'
  279. m.m_svpict='*-:SAVEPICT'
  280. m.m_basbefore='*-:BASBEFORE'
  281. m.m_default='*-:DEFAULT'
  282. m.m_section3='*-#SECTION 3'
  283. m.m_method='*-:METHOD'
  284. m.m_errline='Error in line '
  285. m.c_dlgface="MS Sans Serif"
  286. m.c_dlgsize=8.000
  287. m.c_dlgstyle="B"
  288. m.badchars=' /\,-=:;{}[]!@#$%^&*.<>()+|'+CHR(34)+CHR(39)
  289. m.stdascii=''
  290. m.eval_cmnt='SUBSTR(COMMENT,MAX(ATC(m.c_defobj,COMMENT),'+;
  291.             'ATC(m.m_defobj,COMMENT)))'
  292. DIMENSION a_inclib(1),a_baslib(1)
  293. m.inclibs=0
  294. m.baslibs=0
  295. DIMENSION a_fnctname(1,2)
  296. m.fnctnames=0
  297. DIMENSION a_scxalias(16),a_fscxdata(1),a_scxupd(1)
  298. a_scxupd=''
  299. m.scxcount=0
  300. m.platform_=''
  301. m.splatform_=m.cplatform_
  302. m.fcountadj=IIF(_FOX25,8,9)
  303. a_scxdrv=''
  304. a_sprdrv=''
  305. m.ffoxscx2=''
  306. m.fscxbase=''
  307. m.fscxdata=''
  308. m.fsprout=''
  309. m.fspxout=''
  310. m.fsprerr=''
  311. m.scx_name=''
  312. m.newsetpath=''
  313. m.projpath=''
  314. m.lib_mode=.F.
  315. m.gen_mode=.T.
  316. m.xgen_mode=.T.
  317. m.fromproj=.T.
  318. m.pjxset=.F.
  319. m.drv_no=0
  320. m.r_pjxbase=m.recno
  321. m.r_scxdata=1
  322. m.allplatforms=.F.
  323. IF .NOT.EMPTY(m.ffoxscx)
  324.   IF m.fgenscx=='GENSCX'.OR.FILE(m.fgenscx)
  325.     CLEAR TYPEAHEAD
  326.     DO (m.fgenscx) WITH m.projdbf,m.recno
  327.   ELSE
  328.     =warning('_GENSCX =',m.fgenscx)
  329.     m.fgenscx=''
  330.   ENDIF
  331. ELSE
  332.   m.fgenscx=''
  333. ENDIF
  334. RELEASE a_fscxdrv,a_scxdrv,a_scxdrvs,a_scxdrvm,a_c_scxdrv
  335. IF m.gen_mode
  336.   IF FILE(m.genscrn)
  337.     IF EMPTY(m.lastsetpath)
  338.       SET PATH TO
  339.     ELSE
  340.       SET PATH TO (m.lastsetpath)
  341.     ENDIF
  342.     m.memtemp1=uniquefile()+'.MEM'
  343.     SAVE TO (m.memtemp1) ALL LIKE ?_*
  344.     RELEASE ALL LIKE ?_*
  345.     m.memtemp2=uniquefile()+'.MEM'
  346.     SAVE TO (m.memtemp2) ALL LIKE f*
  347.     RELEASE ALL LIKE f*
  348.     m.memtemp3=uniquefile()+'.MEM'
  349.     SAVE TO (m.memtemp3) ALL LIKE last*
  350.     RELEASE ALL LIKE last*
  351.     CLEAR TYPEAHEAD
  352.     ON ERROR
  353.     DO (m.genscrn) WITH m.projdbf,m.recno
  354.     SET ESCAPE OFF
  355.     ON ERROR DO errorhnd WITH ERROR(),MESSAGE(),PROGRAM(),LINENO(),MESSAGE(1)
  356.     IF _WINDOWS
  357.       SET MESSAGE TO ''
  358.     ENDIF
  359.     IF FILE(m.memtemp1)
  360.       RESTORE FROM (m.memtemp1) ADDITIVE
  361.       ERASE (m.memtemp1)
  362.     ENDIF
  363.     IF FILE(m.memtemp2)
  364.       RESTORE FROM (m.memtemp2) ADDITIVE
  365.       ERASE (m.memtemp2)
  366.     ENDIF
  367.     IF FILE(m.memtemp3)
  368.       RESTORE FROM (m.memtemp3) ADDITIVE
  369.       ERASE (m.memtemp3)
  370.     ENDIF
  371.     DO restoreenv
  372.   ELSE
  373.     =warning('_GENSCRNX =',m.genscrn)
  374.     m.genscrn=''
  375.   ENDIF
  376. ELSE
  377.   m.genscrn=''
  378. ENDIF
  379. IF m.xgen_mode.AND..NOT.lib_mode.AND.FILE(m.fsprout)
  380.   IF m.fupdspr=='UPDSPR'.OR.FILE(m.fupdspr)
  381.     CLEAR TYPEAHEAD
  382.     DO (m.fupdspr) WITH m.projdbf,m.recno
  383.   ELSE
  384.     =warning('_UPDSPR =',m.fupdspr)
  385.     m.fupdspr=''
  386.   ENDIF
  387. ELSE
  388.   m.fupdspr=''
  389. ENDIF
  390. DO cleanup WITH .T.
  391. RETURN m.gstatus
  392.  
  393. * END GENSCRNX.PRG
  394.  
  395.  
  396.  
  397. FUNCTION genscx
  398. PARAMETER m.projdbf,m.recno
  399. PRIVATE m.screenset,m.obj_lib,m.obj_name,m.obj_base,m.obj_field,m.obj_expr
  400. PRIVATE m.lib_name,m.lib_upd,m.loop_plat,m.loop_flag,m.loop_obj,m.loop_def
  401. PRIVATE m.lastslct,m.lastexac,m.lastfilter,m.winrelease,m.scx_file
  402. PRIVATE m.insscxs,m.memvarmode,m.basbefore,m.screenend,m.setupcd
  403. PRIVATE m.basobjs,m.setfilter,m.field_name,m.field_eval,m.field_type
  404. PRIVATE m.old_text,m.new_text,m.match,m.match_drv,m.match_pos,m.match_no
  405. PRIVATE m.snpttype,m.snptname,m.snptname_,m.storesize,m.fnctname,m.paramlist
  406. PRIVATE m.name_mode,m.scx_alias,m.file_ext,m.comp_flag,m.gsx_flag,m.set_mode
  407. PRIVATE m.rec_count,m.rec_total,m.str_data,m.str_data2,m.str_data3
  408. PRIVATE m.r,m.r2,m.memline,m.at_pos,m.at_pos2,m.at_line,m.i,m.j,m.k
  409.  
  410. m.lastslct=SELECT()
  411. IF USED('FOXSCX')
  412.   USE IN FOXSCX
  413. ENDIF
  414. IF USED('_PJXDATA')
  415.   SELECT _PJXDATA
  416.   USE
  417. ELSE
  418.   SELECT 0
  419. ENDIF
  420. IF USED('PJXBASE')
  421.   USE IN PJXBASE
  422. ENDIF
  423. IF USED('PJXDATA')
  424.   SELECT PJXDATA
  425.   USE
  426. ELSE
  427.   SELECT 0
  428. ENDIF
  429. USE (m.projdbf) AGAIN ALIAS PJXBASE
  430. SET FILTER TO .NOT.DELETED()
  431. LOCATE
  432. IF .NOT.TYPE=='H'
  433.   LOCATE FOR TYPE=='H'
  434.   IF EOF()
  435.     USE
  436.     SELECT (m.lastslct)
  437.     RETURN m.gstatus
  438.   ENDIF
  439. ENDIF
  440. m.projpath=MLINE(NAME,1)
  441. IF .NOT.'\'$m.projpath
  442.   m.projpath=FULLPATH(m.projpath,m.projdbf)
  443. ENDIF
  444. m.projdbf=FULLPATH(uniquefile(),m.projdbf)
  445. GOTO m.recno
  446. IF TYPE==m.null
  447.   m.recno=2
  448. ELSE
  449.   m.recno=3
  450. ENDIF
  451. m.i=SETID
  452. IF m.i=0
  453.   m.fromproj=.F.
  454. ENDIF
  455. IF m.i=0
  456.   COPY TO (m.projdbf)
  457. ELSE
  458.   COPY TO (m.projdbf) FOR SETID=m.i.AND.UPPER(TYPE)=='S'
  459. ENDIF
  460. LOCATE
  461. SELECT PJXBASE
  462. LOCATE FOR TYPE=='H'
  463. IF EOF()
  464.   LOCATE
  465. ENDIF
  466. IF RECNO()>m.r_pjxbase
  467.   m.r_pjxbase=m.r_pjxbase+1
  468. ENDIF
  469. RELEASE a_scatter
  470. SCATTER TO a_scatter MEMO
  471. SELECT 0
  472. USE (m.projdbf) ALIAS PJXDATA
  473. LOCATE
  474. IF m.i#0
  475.   INSERT BLANK BEFORE
  476.   GATHER FROM a_scatter MEMO
  477.   REPLACE SETID WITH m.i
  478. ENDIF
  479. RELEASE a_scatter
  480. LOCATE FOR TYPE==m.null.OR.TYPE=='S'
  481. IF m.fromproj.AND.RECNO()<=2
  482.   SCATTER TO a_scatter MEMO
  483.   DELETE
  484.   APPEND BLANK
  485.   GATHER FROM a_scatter MEMO
  486.   RELEASE a_scatter
  487.   PACK
  488.   LOCATE FOR TYPE==m.null.OR.TYPE=='S'
  489.   m.r_pjxbase=RECNO()
  490. ENDIF
  491. IF EOF()
  492.   USE
  493.   SELECT (m.lastslct)
  494.   RETURN m.gstatus
  495. ENDIF
  496. m.recno=RECNO()
  497. DO CASE
  498.   CASE TYPE('SAVECODE')#'L'
  499.     m.allplatforms=.T.
  500.   CASE m.platonly=='ON'
  501.     m.allplatforms=.F.
  502.     REPLACE SAVECODE WITH .T.
  503.   CASE m.platonly=='OFF'
  504.     m.allplatforms=.T.
  505.     REPLACE SAVECODE WITH .F.
  506.   OTHERWISE
  507.     m.allplatforms=.NOT.SAVECODE
  508. ENDCASE
  509. m.memline=MLINE(OUTFILE,1)
  510. IF m.fromproj
  511.   m.fsprout=FULLPATH(STRTRAN(ALLTRIM(m.memline),m.null,''),m.projpath)
  512. ELSE
  513.   IF _WINDOWS
  514.     m.fsprout=SUBSTR(FULLPATH(STRTRAN(STRTRAN(ALLTRIM(m.memline),;
  515.               '..\',''),m.null,'')),3)
  516.     IF ':'$m.memline
  517.       m.fsprout=LEFT(m.memline,2)+m.fsprout
  518.     ENDIF  
  519.   ELSE
  520.     m.fsprout=FULLPATH(STRTRAN(ALLTRIM(m.memline),m.null,''),m.projpath)
  521.   ENDIF
  522. ENDIF
  523. IF .NOT.':'$m.fsprout
  524.   SKIP -1
  525.   IF SUBSTR(MLINE(NAME,1),2,1)==':'
  526.     m.fsprout=LEFT(MLINE(NAME,1),2)+m.fsprout
  527.   ENDIF
  528. ENDIF
  529. GOTO m.recno
  530. m.fromproj=.NOT.EMPTY(TYPE).AND.ASC(TYPE)>0
  531. IF m.fromproj
  532.   m.at_pos=RAT('\',m.projpath)
  533.   IF m.at_pos>0
  534.     IF .NOT.LEFT(m.fsprout,1)=='\'.AND..NOT.':'$m.fsprout
  535.       m.fsprout=LEFT(m.projpath,m.at_pos)+m.fsprout
  536.     ENDIF
  537.   ELSE
  538.     LOCATE
  539.     m.fsprout=FULLPATH(m.fsprout,HOMEDIR)
  540.   ENDIF
  541. ELSE
  542.   m.fsprout=FULLPATH(m.fsprout,HOMEDIR)
  543. ENDIF
  544. GOTO m.recno
  545. m.file_ext=UPPER(RIGHT(m.fsprout,4))
  546. DO CASE
  547.   CASE m.file_ext=='.SPR'
  548.     m.file_ext='.SPX'
  549.   CASE m.file_ext=='.MPR'
  550.     m.file_ext='.MPX'
  551.   OTHERWISE
  552.     m.file_ext='.FXP'
  553. ENDCASE
  554. m.fspxout=trimext(m.fsprout)+m.file_ext
  555. m.fsprerr=trimext(m.fsprout)+'.ERR'
  556. IF m.fromproj
  557.   REPLACE OUTFILE WITH m.fsprout+m.null, HOMEDIR WITH ''
  558. ENDIF
  559. m.winrelease=trimpath(m.fsprerr)
  560. IF WEXIST(m.winrelease)
  561.   RELEASE WINDOW (m.winrelease)
  562. ENDIF
  563. IF FILE(m.fsprerr)
  564.   ERASE (m.fsprerr)
  565. ENDIF
  566. IF FILE(m.fspxout)
  567.   ERASE (m.fspxout)
  568. ENDIF
  569. IF m.fromproj
  570.   SELECT PJXBASE
  571.   GOTO m.r_pjxbase
  572.   IF RECNO()>=4
  573.     SKIP -2
  574.     IF .NOT.EOF()
  575.       GOTO m.r_pjxbase
  576.       SKIP -1
  577.       m.i=0
  578.       IF ATC('.SCX',NAME)=0
  579.         SKIP 2
  580.       ENDIF
  581.       SKIP -1
  582.       IF ATC('.SPR',NAME)=0
  583.         SKIP -1
  584.       ENDIF
  585.       IF ATC('.SPR',NAME)>0
  586.         m.fsprout2=FULLPATH(STRTRAN(ALLTRIM(MLINE(NAME,1)),m.null,''),m.fsprout)
  587.         m.fspxout2=trimext(m.fsprout2)+'.SPX'
  588.         IF FILE(m.fsprout2).AND..NOT.FILE(m.fspxout2)
  589.           IF ADIR(a_dir,m.fsprout2)=1.AND.a_dir(1,2)=0
  590.             ERASE (m.fsprout2)
  591.           ENDIF
  592.           RELEASE a_dir
  593.         ENDIF
  594.       ENDIF
  595.     ENDIF
  596.   ENDIF
  597. ENDIF
  598. m.screenend=.F.
  599. IF m.fromproj
  600.   SELECT PJXBASE
  601.   GOTO m.r_pjxbase
  602.   m.i=SETID
  603.   SKIP 2
  604.   IF EOF().OR.SETID=0
  605.     m.screenend=.T.
  606.   ENDIF
  607. ENDIF
  608. SELECT PJXBASE
  609. IF m.recno>RECCOUNT()
  610.   LOCATE FOR TYPE==m.null.OR.TYPE=='S'
  611.   IF EOF()
  612.     LOCATE
  613.   ELSE
  614.     m.recno=RECNO()
  615.   ENDIF
  616. ENDIF
  617. GOTO m.recno
  618. m.msg1=''
  619. m.loop_plat=.F.
  620. m.screenset=.F.
  621. m.comp_flag=.F.
  622. DO WHILE .T.
  623.   DO WHILE .T.
  624.     =esc_check()
  625.     IF USED('SCXDATA')
  626.       m.rec_count=RECCOUNT('SCXDATA')
  627.     ENDIF
  628.     IF .NOT.screenset
  629.       m.platform_=ALLTRIM(m.platform_)
  630.       DO CASE
  631.         CASE EMPTY(m.platform_)
  632.           IF m.allplatforms
  633.             m.platform_=m.cplatform_
  634.           ELSE
  635.             DO CASE
  636.               CASE _WINDOWS
  637.                 m.platform_='WINDOWS'
  638.               CASE _MAC
  639.                 m.platform_='MAC'
  640.               CASE _UNIX
  641.                 m.platform_='UNIX'
  642.               OTHERWISE
  643.                 m.platform_='DOS'
  644.             ENDCASE
  645.           ENDIF
  646.         CASE .NOT._FOX25.OR..NOT.m.allplatforms
  647.           EXIT
  648.         CASE m.platform_==m.null
  649.           m.platform_=m.splatform_
  650.         CASE .NOT.USED('SCXDATA')
  651.           =.F.
  652.         OTHERWISE
  653.           DO CASE
  654.             CASE m.platform_=='DOS'
  655.               m.platform_='WINDOWS'
  656.             CASE m.platform_=='WINDOWS'
  657.               m.platform_='MAC'
  658.             CASE m.platform_=='MAC'
  659.               m.platform_='UNIX'
  660.             CASE m.platform_=='UNIX'.AND..NOT.ALLTRIM(m.splatform_)=='DOS'
  661.               m.platform_='DOS'
  662.             OTHERWISE
  663.               EXIT
  664.           ENDCASE
  665.           IF m.platform_==ALLTRIM(m.splatform_)
  666.             EXIT
  667.           ENDIF
  668.       ENDCASE
  669.       m.platform_=PADR(m.platform_,8)
  670.     ENDIF
  671.     IF .NOT.m.lib_mode.AND..NOT.EMPTY(m.msg1)
  672.       m.msg2=SPACE(50)
  673.       DO delaybar WITH m.msg1,m.msg2,.1,.F.
  674.     ENDIF
  675.     IF .NOT.m.allplatforms.OR.m.platform_==m.splatform_
  676.       m.name_mode=.F.
  677.       SELECT PJXDATA
  678.       IF .NOT.TYPE=='s'
  679.         LOCATE FOR TYPE=='s'
  680.       ENDIF
  681.       IF EOF()
  682.         EXIT
  683.       ENDIF
  684.       IF m.fromproj
  685.         m.fscxbase=ALLTRIM(MLINE(NAME,1))
  686.         m.at_pos=RAT('\',m.projpath)
  687.         IF m.at_pos>0.AND..NOT.LEFT(m.fscxbase,1)=='\'.AND.;
  688.            .NOT.':'$m.fscxbase
  689.           m.fscxbase=LEFT(m.projpath,m.at_pos)+m.fscxbase
  690.         ELSE
  691.           LOCATE
  692.           m.fscxbase=FULLPATH(trimpath(m.fscxbase),HOMEDIR)
  693.           IF .NOT.FILE(m.fscxbase)
  694.             m.fscxbase=FULLPATH(trimpath(m.fscxbase),m.projpath)
  695.           ENDIF
  696.         ENDIF
  697.       ELSE
  698.         m.fscxbase=SUBSTR(FULLPATH(STRTRAN(ALLTRIM(MLINE(NAME,1)),'..\','')),3)
  699.         IF .NOT.'\'$m.fscxbase
  700.           LOCATE
  701.           m.fscxbase=FULLPATH(m.fscxbase,NAME)
  702.         ELSE
  703.           IF .NOT.':'$m.fscxbase
  704.             IF SUBSTR(m.fsprout,2,1)==':'
  705.               m.fscxbase=LEFT(m.fsprout,2)+m.fscxbase
  706.             ENDIF
  707.           ENDIF
  708.           IF .NOT.FILE(m.fscxbase)
  709.             m.fscxbase=trimpath(m.fscxbase)
  710.             IF .NOT.FILE(m.fscxbase)
  711.               LOCATE
  712.               m.fscxbase=FULLPATH(m.fscxbase,NAME)
  713.             ENDIF
  714.           ENDIF
  715.         ENDIF
  716.       ENDIF
  717.       m.fscxbase=STRTRAN(m.fscxbase,m.null,'')
  718.       IF EOF().OR..NOT.FILE(m.fscxbase)
  719.         EXIT
  720.       ENDIF
  721.       IF USED('SCXBASE')
  722.         SELECT SCXBASE
  723.         USE
  724.       ELSE
  725.         SELECT 0
  726.       ENDIF
  727.       USE (m.fscxbase) ALIAS SCXBASE AGAIN
  728.       IF TYPE('PLATFORM')=='C'
  729.         LOCATE FOR OBJTYPE=1.AND.PLATFORM==m.cplatform_
  730.       ELSE
  731.         LOCATE FOR OBJTYPE=1
  732.       ENDIF
  733.       IF EOF()
  734.         IF TYPE('PLATFORM')#'C'
  735.           EXIT
  736.         ENDIF
  737.         LOCATE FOR OBJTYPE=1.AND.PLATFORM==m.splatform_
  738.         IF EOF()
  739.           LOCATE FOR OBJTYPE=1
  740.           IF EOF()
  741.             EXIT
  742.           ENDIF
  743.           m.splatform_=PLATFORM
  744.           m.platform_=m.null
  745.           LOOP
  746.         ENDIF
  747.       ENDIF
  748.       IF USED('FOXSCX')
  749.         SELECT FOXSCX
  750.         IF TYPE('PLATFORM')=='C'
  751.           SET FILTER TO PLATFORM==m.platform_
  752.         ELSE
  753.           SET FILTER TO
  754.         ENDIF
  755.         SET ORDER TO OBJNAME_
  756.         LOCATE
  757.         IF USED('SCXDATA')
  758.           SELECT SCXDATA
  759.         ENDIF
  760.       ENDIF
  761.       m.setupcd=SETUPCODE
  762.       m.setupcd=evltxt(m.setupcd)
  763.       m.gsx_flag=(.NOT.SETUPCODE==m.setupcd)
  764.       m.at_line=ATCLINE(m.c_noxgen,m.setupcd)
  765.       IF m.at_line>0
  766.         m.memline=ALLTRIM(MLINE(m.setupcd,m.at_line))
  767.         m.at_pos=ATC(m.c_noxgen,m.memline)
  768.         IF m.at_pos=1
  769.           m.xgen_mode=.F.
  770.           EXIT
  771.         ENDIF
  772.       ENDIF
  773.       IF m.platonly=='ON'
  774.         m.setupcd='*:SET PLATONLY ON'+m.cr_lf+m.setupcd
  775.       ENDIF
  776.       m.j=0
  777.       FOR m.i = 1 TO 8
  778.         IF .NOT.EMPTY(a_fscxdrv(m.i)).OR.(m.i<=6.AND.;
  779.            .NOT.EMPTY(a_fsprdrv(m.i)))
  780.           m.j=1
  781.           EXIT
  782.         ENDIF
  783.       ENDFOR
  784.       IF .NOT.m.gsx_flag.AND.m.j=0.AND..NOT.'*:'$m.setupcd.AND.;
  785.          .NOT.'#:'$m.setupcd
  786.         LOCATE FOR '*:'$COMMENT.OR.('{{'$COMMENT.AND.'}}'$COMMENT)
  787.         IF EOF()
  788.           EXIT
  789.         ENDIF
  790.       ENDIF
  791.       m.msg1=PADR('Intializing Screen Database...',50)
  792.       m.msg2=PADR(trimpath(STRTRAN(IIF(_WINDOWS,LOWER(m.fscxbase),;
  793.              UPPER(m.fscxbase)),m.null,'')),50)
  794.       DO delaybar WITH m.msg1,m.msg2,0,.T.
  795.       m.scxcount=m.scxcount+1
  796.       FOR m.i = 1 TO 16
  797.         a_scxalias(m.i)=uniquefile()
  798.         IF USED(a_scxalias(m.i))
  799.           USE IN (a_scxalias(m.i))
  800.         ENDIF
  801.       ENDFOR
  802.       m.fscxdata=FULLPATH(a_scxalias(m.scxcount),m.fscxbase)
  803.       DIMENSION a_fscxdata(m.scxcount),a_scxupd(m.scxcount)
  804.       a_fscxdata(m.scxcount)=m.fscxdata
  805.       IF TYPE('PLATFORM')#'C'
  806.         _FOX25=.F.
  807.       ENDIF
  808.       SELECT * FROM SCXBASE INTO TABLE (m.fscxdata)
  809.       USE
  810.       IF USED('SCXDATA')
  811.         SELECT SCXDATA
  812.         USE
  813.       ELSE
  814.         SELECT 0
  815.       ENDIF
  816.       USE (m.fscxdata) ALIAS SCXDATA
  817.       IF TYPE('PLATFORM')=='C'
  818.         LOCATE FOR OBJTYPE=1.AND.PLATFORM==m.splatform_
  819.       ELSE
  820.         LOCATE FOR OBJTYPE=1
  821.       ENDIF
  822.       IF EOF()
  823.         EXIT
  824.       ENDIF
  825.       IF m.scxcount>1
  826.         m.setupcd=SETUPCODE
  827.         m.setupcd=evltxt(m.setupcd)
  828.       ENDIF
  829.       REPLACE SETUPCODE WITH m.setupcd
  830.       m.setupcd=''
  831.       m.rec_count=RECCOUNT()
  832.       DO delaybar WITH '','',100,.F.
  833.       m.msg1=''
  834.     ENDIF
  835.     IF .NOT.USED('SCXDATA')
  836.       IF .NOT._FOX25
  837.         =warning("GENSCRNX could not be pre-processed file")
  838.         EXIT
  839.       ENDIF
  840.       LOCATE
  841.       IF EOF()
  842.         EXIT
  843.       ENDIF
  844.       m.splatform_=ALLTRIM(m.splatform_)
  845.       DO CASE
  846.         CASE m.splatform_=='WINDOWS'
  847.           m.splatform_='DOS'
  848.         CASE m.splatform_=='MAC'
  849.           m.splatform_='WINDOWS'
  850.         CASE m.splatform_=='UNIX'
  851.           m.splatform_='MAC'
  852.         CASE m.splatform_=='DOS'
  853.           m.splatform_='UNIX'
  854.         OTHERWISE
  855.           EXIT
  856.       ENDCASE
  857.       m.splatform_=PADR(m.splatform_,8)
  858.       m.platform_=m.null
  859.       LOOP
  860.     ENDIF
  861.     m.screenset=.F.
  862.     SELECT SCXDATA
  863.     IF TYPE('PLATFORM')=='C'
  864.       SET FILTER TO PLATFORM==m.platform_.AND.OBJTYPE#2.AND.OBJTYPE#10
  865.     ELSE
  866.       SET FILTER TO OBJTYPE#2.AND.OBJTYPE#10
  867.     ENDIF 
  868.     LOCATE
  869.     IF EOF()
  870.       LOOP
  871.     ENDIF
  872.     IF USED('FOXSCX')
  873.       SELECT FOXSCX
  874.       IF TYPE('PLATFORM')=='C'
  875.         SET FILTER TO PLATFORM==m.platform_
  876.       ELSE
  877.         SET FILTER TO
  878.       ENDIF
  879.       SET ORDER TO OBJNAME_
  880.       LOCATE
  881.       SELECT SCXDATA
  882.     ENDIF
  883.     COUNT TO m.rec_total
  884.     LOCATE FOR OBJTYPE#1
  885.     m.r_scxdata=IIF(EOF(),m.r_scxdata,RECNO())
  886.     LOCATE
  887.     m.setupcd=SETUPCODE
  888.     m.setupcd=evltxt(m.setupcd)
  889.     LOCATE
  890.     REPLACE SETUPCODE WITH evltxt(m.setupcd)
  891.     m.setupcd=''
  892.     SCATTER MEMVAR MEMO
  893.     m.scx_name=trimpath(m.fscxbase,.T.)
  894.     m.lib_name=m.scx_name
  895.     m.newsetpath=m.lastsetpath+';'+FULLPATH(' ',m.fscxbase)
  896.     SET PATH TO (m.newsetpath)
  897.     a_inclib=''
  898.     a_baslib=''
  899.     DIMENSION a_inclib(1),a_baslib(1)
  900.     m.inclibs=0
  901.     m.baslibs=0
  902.     m.memvarmode=.F.
  903.     m.match_drv=.F.
  904.     FOR m.i = 1 TO 8
  905.       a_scxdrvs(m.i)=a_scxdrvm(m.i)
  906.       IF .NOT.m.loop_plat.AND.m.scxcount=1.AND.;
  907.          .NOT.EMPTY(a_fscxdrv(m.i)).AND.ASCAN(a_scxdrv,a_fscxdrv(m.i))=0
  908.         IF FILE(a_fscxdrv(m.i))
  909.           m.match_drv=.T.
  910.           a_scxdrvs(m.i)=a_scxdrvs(m.i)+1
  911.           a_scxdrvm(m.i)=a_scxdrvm(m.i)+1
  912.           a_scxdrv(a_scxdrvs(m.i),m.i)=a_fscxdrv(m.i)
  913.         ELSE
  914.           =warning(a_c_scxdrv(m.i),a_fscxdrv(m.i))
  915.         ENDIF
  916.       ENDIF
  917.       IF m.i>6
  918.         LOOP
  919.       ENDIF
  920.       a_sprdrvs(m.i)=a_sprdrvm(m.i)
  921.       IF .NOT.m.loop_plat.AND.m.scxcount=1.AND.;
  922.          .NOT.EMPTY(a_fsprdrv(m.i)).AND.;
  923.          ASCAN(a_sprdrv,a_fsprdrv(m.i))=0
  924.         IF FILE(a_fsprdrv(m.i))
  925.           a_sprdrvs(m.i)=a_sprdrvs(m.i)+1
  926.           a_sprdrvm(m.i)=a_sprdrvm(m.i)+1
  927.           a_sprdrv(a_sprdrvs(m.i),m.i)=a_fsprdrv(m.i)
  928.         ELSE
  929.           =warning(a_c_sprdrv(m.i),a_fsprdrv(m.i))
  930.         ENDIF
  931.       ENDIF
  932.     ENDFOR
  933.     m.loop_plat=.T.
  934.     m.at_line=ATCLINE(a_c_scxdrv(1),SETUPCODE)
  935.     IF m.at_line>0
  936.       m.i=m.at_line-1
  937.       DO WHILE m.i<MEMLINES(SETUPCODE)
  938.         m.i=m.i+1
  939.         m.memline=ALLTRIM(MLINE(SETUPCODE,m.i))
  940.         IF m.i>m.at_line.AND..NOT.'*:'$m.memline
  941.           m.at_pos=AT(m.cr,SETUPCODE,m.i)+1
  942.           IF m.at_pos=1.OR.ATC(a_c_scxdrv(1),SUBSTR(SETUPCODE,m.at_pos))=0
  943.             EXIT
  944.           ENDIF
  945.           LOOP
  946.         ENDIF
  947.         m.at_pos=ATC(a_c_scxdrv(1),m.memline)
  948.         IF m.at_pos=1
  949.           m.memline=add_fext(ALLTRIM(SUBSTR(m.memline,m.at_pos+;
  950.                     LEN(a_c_scxdrv(1)))))
  951.           IF EMPTY(m.memline).OR..NOT.FILE(m.memline)
  952.             =warning(a_c_scxdrv(1),m.memline)
  953.             LOOP
  954.           ENDIF
  955.           a_scxdrvs(1)=a_scxdrvs(1)+1
  956.           DIMENSION a_scxdrv(a_scxdrvs(1),8)
  957.           a_scxdrv(a_scxdrvs(1),1)=m.memline
  958.           LOOP
  959.         ENDIF
  960.       ENDDO
  961.     ENDIF
  962.     IF a_scxdrvs(1)>0
  963.       m.drv_no=1
  964.       FOR m.i = 1 TO a_scxdrvs(1)
  965.         SCAN ALL FOR .NOT.DELETED()
  966.           m.match_drv=.T.
  967.           DO (a_scxdrv(m.i,1))
  968.           DO esc_check
  969.         ENDSCAN
  970.         LOCATE
  971.         SCATTER MEMVAR MEMO
  972.       ENDFOR
  973.       DO restoreenv
  974.     ENDIF
  975.     m.insscxs=0
  976.     m.at_line=ATCLINE('*:',SETUPCODE)
  977.     IF m.at_line>0
  978.       m.i=m.at_line-1
  979.       DO WHILE m.i<MEMLINES(SETUPCODE)
  980.         m.i=m.i+1
  981.         m.memline=ALLTRIM(MLINE(SETUPCODE,m.i))
  982.         IF m.i>m.at_line.AND..NOT.'*:'$m.memline
  983.           m.at_pos=AT(m.cr,SETUPCODE,m.i)+1
  984.           IF m.at_pos=1.OR.ATC('*:',SUBSTR(SETUPCODE,m.at_pos))=0
  985.             EXIT
  986.           ENDIF
  987.           LOOP
  988.         ENDIF
  989.         m.at_pos=ATC(m.c_noxgen,m.memline)
  990.         IF m.at_pos=1
  991.           m.xgen_mode=.F.
  992.           EXIT
  993.         ENDIF
  994.         FOR m.j = 2 TO 8
  995.           m.at_pos=ATC(a_c_scxdrv(m.j),m.memline)
  996.           IF m.at_pos=1
  997.             m.memline=add_fext(ALLTRIM(SUBSTR(m.memline,m.at_pos+;
  998.                       LEN(a_c_scxdrv(m.j)))))
  999.             IF EMPTY(m.memline).OR..NOT.FILE(m.memline)
  1000.               =warning(a_c_scxdrv(m.j),m.memline)
  1001.               LOOP
  1002.             ENDIF
  1003.             a_scxdrvs(m.j)=a_scxdrvs(m.j)+1
  1004.             DIMENSION a_scxdrv(a_scxdrvs(m.j),8)
  1005.             a_scxdrv(a_scxdrvs(m.j),m.j)=m.memline
  1006.             LOOP
  1007.           ENDIF
  1008.         ENDFOR
  1009.         FOR m.j = 1 TO 6
  1010.           m.at_pos=ATC(a_c_sprdrv(m.j),m.memline)
  1011.           IF m.at_pos=1
  1012.             m.memline=add_fext(ALLTRIM(SUBSTR(m.memline,m.at_pos+;
  1013.                       LEN(a_c_sprdrv(m.j)))))
  1014.             IF EMPTY(m.memline).OR..NOT.FILE(m.memline)
  1015.               =warning(a_c_sprdrv(m.j),m.memline)
  1016.               LOOP
  1017.             ENDIF
  1018.             a_sprdrvs(m.j)=a_sprdrvs(m.j)+1
  1019.             DIMENSION a_sprdrv(a_sprdrvs(m.j),8)
  1020.             a_sprdrv(a_sprdrvs(m.j),m.j)=m.memline
  1021.             LOOP
  1022.           ENDIF
  1023.         ENDFOR
  1024.         m.at_pos=ATC(m.c_deflib,m.memline)
  1025.         IF m.at_pos=1
  1026.           m.memline=ALLTRIM(UPPER(SUBSTR(m.memline,m.at_pos+LEN(m.c_deflib))))
  1027.           IF EMPTY(m.memline)
  1028.             LOOP
  1029.           ENDIF
  1030.           m.lib_mode=.T.
  1031.           m.lib_name=m.memline
  1032.           REPLACE SETUPCODE WITH strtranc(SETUPCODE,m.c_deflib,m.m_deflib)
  1033.         ELSE
  1034.           m.at_pos=ATC(m.c_nogen,m.memline)
  1035.         ENDIF
  1036.         IF m.at_pos=1
  1037.           IF .NOT.m.gen_mode
  1038.             LOOP
  1039.           ENDIF
  1040.           m.gen_mode=.F.
  1041.           IF m.fromproj.AND..NOT.m.screenend
  1042.             REPLACE COMMENT WITH ''
  1043.             COPY MEMO COMMENT TO (m.fsprout)
  1044.           ELSE
  1045.             IF FILE(m.fsprout)
  1046.               ERASE (m.fsprout)
  1047.             ENDIF
  1048.           ENDIF
  1049.           IF FILE(m.fspxout)
  1050.             ERASE (m.fspxout)
  1051.           ENDIF
  1052.           IF FILE(m.fsprerr)
  1053.             ERASE (m.fsprerr)
  1054.           ENDIF
  1055.           LOOP
  1056.         ENDIF
  1057.         m.at_pos=ATC(m.c_inclib,m.memline)
  1058.         IF m.at_pos=1
  1059.           m.memline=CHRTRAN(ALLTRIM(SUBSTR(m.memline,m.at_pos+;
  1060.                     LEN(m.c_inclib))),m.badchars,m.stdascii)
  1061.           IF EMPTY(m.memline)
  1062.             LOOP
  1063.           ENDIF
  1064.           m.inclibs=m.inclibs+1
  1065.           DIMENSION a_inclib(m.inclibs)
  1066.           a_inclib(m.inclibs)=m.memline
  1067.           LOOP
  1068.         ENDIF
  1069.         m.at_pos=ATC(m.c_baslib,m.memline)
  1070.         IF m.at_pos=1
  1071.           m.memline=CHRTRAN(ALLTRIM(SUBSTR(m.memline,m.at_pos+;
  1072.                     LEN(m.c_baslib))),m.badchars,m.stdascii)
  1073.           IF EMPTY(m.memline)
  1074.             LOOP
  1075.           ENDIF
  1076.           m.baslibs=m.baslibs+1
  1077.           DIMENSION a_baslib(m.baslibs)
  1078.           a_baslib(m.baslibs)=m.memline
  1079.           IF ASCAN(a_inclib,m.memline)=0
  1080.             m.inclibs=m.inclibs+1
  1081.             DIMENSION a_inclib(m.inclibs)
  1082.             a_inclib(m.inclibs)=m.memline
  1083.           ENDIF
  1084.           LOOP
  1085.         ENDIF
  1086.         m.at_pos=ATC(m.c_memvar,m.memline)
  1087.         IF m.at_pos=1
  1088.           m.memvarmode=.T.
  1089.           LOOP
  1090.         ENDIF
  1091.         IF TYPE('PLATFORM')=='C'
  1092.           m.at_pos=ATC(m.c_name,m.memline)
  1093.           IF m.at_pos=1
  1094.             m.name_mode=.T.
  1095.             LOOP
  1096.           ENDIF
  1097.         ENDIF
  1098.         m.at_pos=ATC(m.c_compspr,m.memline)
  1099.         IF m.at_pos=1
  1100.           m.compspr='ON'
  1101.           LOOP
  1102.         ENDIF
  1103.         m.at_pos=ATC(m.c_nocompspr,m.memline)
  1104.         IF m.at_pos=1
  1105.           m.compspr='OFF'
  1106.           LOOP
  1107.         ENDIF
  1108.         m.at_pos=ATC(m.c_dispspr,m.memline)
  1109.         IF m.at_pos=1
  1110.           m.dispspr='ON'
  1111.           LOOP
  1112.         ENDIF
  1113.         m.at_pos=ATC(m.c_nodispspr,m.memline)
  1114.         IF m.at_pos=1
  1115.           m.dispspr='OFF'
  1116.           LOOP
  1117.         ENDIF
  1118.         m.at_pos=ATC(m.c_autorun,m.memline)
  1119.         IF m.at_pos=1
  1120.           m.autorun='ON'
  1121.           LOOP
  1122.         ENDIF
  1123.         m.at_pos=ATC(m.c_noautorun,m.memline)
  1124.         IF m.at_pos=1
  1125.           m.autorun='OFF'
  1126.           LOOP
  1127.         ENDIF
  1128.         m.at_pos=ATC(m.c_pjxset,m.memline)
  1129.         IF m.at_pos=1
  1130.           m.pjxset=.T.
  1131.           LOOP
  1132.         ENDIF
  1133.         m.at_pos=ATC(m.c_set,m.memline)
  1134.         IF m.at_pos=1
  1135.           IF m.pjxset.AND.m.fromproj
  1136.             LOOP
  1137.           ENDIF
  1138.           m.memline=ALLTRIM(STRTRAN(SUBSTR(m.memline,m.at_pos+;
  1139.                     LEN(m.c_set)),CHR(9),' '))
  1140.           m.at_pos=AT(' ',m.memline)
  1141.           IF m.at_pos=0
  1142.             LOOP
  1143.           ENDIF
  1144.           m.field_name='PJXDATA.'+ALLTRIM(UPPER(LEFT(m.memline,m.at_pos)))
  1145.           IF TYPE(m.field_name)=='U'
  1146.             m.field_name=STRTRAN(STRTRAN(m.field_name,'BORDERGETS','NOLOGO'),;
  1147.                          'PLATONLY','SAVECODE')
  1148.             IF TYPE(m.field_name)=='U'
  1149.               LOOP
  1150.             ENDIF
  1151.           ENDIF
  1152.           m.memline=ALLTRIM(UPPER(SUBSTR(m.memline,m.at_pos)))
  1153.           DO CASE
  1154.             CASE EMPTY(m.memline)
  1155.               LOOP
  1156.             CASE ATC('ASSOCWINDS',m.field_name)>0
  1157.               m.at_pos=AT(' ',m.memline)
  1158.               IF m.at_pos=0
  1159.                 LOOP
  1160.               ENDIF
  1161.               IF .NOT.ALLTRIM(UPPER(LEFT(m.memline,m.at_pos)))=='TO'
  1162.                 LOOP
  1163.               ENDIF
  1164.               m.memline=ALLTRIM(SUBSTR(m.memline,m.at_pos))
  1165.               m.set_mode=STRTRAN(m.memline,',',CHR(13))+CHR(13)
  1166.             CASE m.memline=='ON'
  1167.               m.set_mode=.T.
  1168.             CASE m.memline=='OFF'
  1169.               m.set_mode=.F.
  1170.             OTHERWISE
  1171.               LOOP
  1172.           ENDCASE
  1173.           GOTO m.recno IN PJXDATA
  1174.           IF TYPE(m.field_name)=='M'
  1175.             REPLACE (m.field_name) WITH EVALUATE(m.field_name)+m.set_mode,;
  1176.                     PJXDATA.MODAL WITH .T.
  1177.           ELSE
  1178.             REPLACE (m.field_name) WITH m.set_mode
  1179.           ENDIF
  1180.           LOOP
  1181.         ENDIF
  1182.         m.at_pos=ATC(m.c_prg,m.memline)
  1183.         IF m.at_pos=1
  1184.           IF m.pjxset.AND.m.fromproj
  1185.             LOOP
  1186.           ENDIF
  1187.           m.at_pos=AT('.',m.fsprout)
  1188.           REPLACE SETUPCODE WITH '#NOREAD PLAIN'+m.cr_lf+SETUPCODE
  1189.           m.i=m.i+1
  1190.           m.memline=m.c_outfile+' '+IIF(m.at_pos=0,m.fsprout,;
  1191.                     LEFT(m.fsprout,m.at_pos-1))+'.PRG'
  1192.         ENDIF
  1193.         m.at_pos=ATC(m.c_outfile,m.memline)
  1194.         IF m.at_pos=1
  1195.           m.memline=ALLTRIM(SUBSTR(m.memline,m.at_pos+LEN(m.c_outfile)))
  1196.           m.at_pos=AT('.',m.memline)
  1197.           IF EMPTY(m.memline).OR.m.at_pos=0.OR.m.at_pos=LEN(m.memline)
  1198.             LOOP
  1199.           ENDIF
  1200.           GOTO m.recno IN PJXDATA
  1201.           IF ':'$m.memline.OR.'\'$m.memline
  1202.             m.fsprout=m.memline
  1203.           ELSE
  1204.             m.fsprout=FULLPATH(m.memline,m.fscxbase)
  1205.           ENDIF
  1206.           m.file_ext=UPPER(RIGHT(m.fsprout,4))
  1207.           DO CASE
  1208.             CASE m.file_ext=='.SPR'
  1209.               m.file_ext='.SPX'
  1210.             CASE m.file_ext=='.MPR'
  1211.               m.file_ext='.MPX'
  1212.             OTHERWISE
  1213.               m.file_ext='.FXP'
  1214.           ENDCASE
  1215.           m.fspxout=trimext(m.fsprout)+m.file_ext
  1216.           m.fsprerr=trimext(m.fsprout)+'.ERR'
  1217.           REPLACE PJXDATA.OUTFILE WITH m.fsprout+m.null
  1218.           m.winrelease=trimpath(m.fsprerr)
  1219.           IF WEXIST(m.winrelease)
  1220.             RELEASE WINDOW (m.winrelease)
  1221.           ENDIF
  1222.           IF FILE(m.fsprerr)
  1223.             ERASE (m.fsprerr)
  1224.           ENDIF
  1225.           IF FILE(m.fspxout)
  1226.             ERASE (m.fspxout)
  1227.           ENDIF
  1228.           m.winrelease=trimpath(m.fsprout)
  1229.           IF WEXIST(m.winrelease)
  1230.             RELEASE WINDOW (m.winrelease)
  1231.           ENDIF
  1232.           IF FILE(m.fsprout)
  1233.             ERASE (m.fsprout)
  1234.           ENDIF
  1235.           LOOP
  1236.         ENDIF
  1237.         m.at_pos=ATC(m.c_genscrnx,m.memline)
  1238.         IF m.at_pos=1
  1239.           m.memline=ALLTRIM(SUBSTR(m.memline,m.at_pos+LEN(m.c_genscrnx)))
  1240.           IF EMPTY(m.memline)
  1241.             LOOP
  1242.           ENDIF
  1243.           IF ':'$m.memline.OR.'\'$m.memline
  1244.             m.genscrn=m.memline
  1245.           ELSE
  1246.             m.genscrn=FULLPATH(m.memline,SYS(2004))
  1247.           ENDIF
  1248.           IF .NOT.'.'$RIGHT(m.genscrn,4)
  1249.             m.genscrn=m.genscrn+'.PRG'
  1250.           ENDIF
  1251.           LOOP
  1252.         ENDIF
  1253.       ENDDO
  1254.     ENDIF
  1255.     IF .NOT.m.xgen_mode
  1256.       EXIT
  1257.     ENDIF
  1258.     SELECT SCXDATA
  1259.     LOCATE
  1260.     IF EMPTY(m.msg1)
  1261.       m.comp_flag=.T.
  1262.       DO CASE
  1263.         CASE m.gen_mode
  1264.           IF _WINDOWS
  1265.             SET MESSAGE TO PADR('Generating Screen Database: '+LOWER(m.fscxbase),79)
  1266.           ENDIF
  1267.           m.msg1=PADR('Generating Screen Database...',50)
  1268.         CASE m.lib_mode
  1269.           IF _WINDOWS
  1270.             SET MESSAGE TO PADR('Updating Library Database: '+LOWER(m.fscxbase),79)
  1271.           ENDIF
  1272.           m.msg1=PADR('Updating Library Database...',50)
  1273.         OTHERWISE
  1274.           IF _WINDOWS
  1275.             SET MESSAGE TO PADR('Scanning Screen Database: '+LOWER(m.fscxbase),79)
  1276.           ENDIF
  1277.           m.msg1=PADR('Scanning Screen Database...',50)
  1278.       ENDCASE
  1279.       m.msg2=PADR(IIF(m.gen_mode,'['+ALLTRIM(m.platform_)+']',''),50)
  1280.       DO delaybar WITH m.msg1,m.msg2,.1,.F.
  1281.     ELSE
  1282.       m.msg2=PADR(IIF(m.gen_mode,'['+ALLTRIM(m.platform_)+']',''),50)
  1283.     ENDIF
  1284.     DO esc_check
  1285.     GOTO m.recno IN PJXDATA
  1286.     IF .NOT.openfoxscx()
  1287.       EXIT
  1288.     ENDIF
  1289.     SELECT FOXSCX
  1290.     IF TYPE('PLATFORM')=='C'
  1291.       SET FILTER TO PLATFORM==m.platform_
  1292.     ELSE
  1293.       SET FILTER TO
  1294.     ENDIF
  1295.     SET ORDER TO OBJSCX_
  1296.     LOCATE
  1297.     m.scx_name=PADR(m.scx_name,LEN(OBJSCX_))
  1298.     m.lib_name=PADR(m.lib_name,LEN(OBJLIB_))
  1299.     SEEK m.scx_name+m.lib_name
  1300.     REPLACE REST OBJFLAG_ WITH .F.;
  1301.             WHILE OBJSCX_==m.scx_name.AND.OBJLIB_==m.lib_name
  1302.     LOCATE
  1303.     SELECT SCXDATA
  1304.     LOCATE
  1305.     m.setupcd=SETUPCODE
  1306.     REPLACE SETUPCODE WITH evltxt(m.setupcd)
  1307.     m.setupcd=''
  1308.     IF ATC(m.c_defobj,SETUPCODE)>0.OR.ATC(m.c_basobj,SETUPCODE)>0
  1309.       REPLACE COMMENT WITH SETUPCODE
  1310.     ENDIF
  1311.     m.lastfilter=FILTER()
  1312.     m.lib_upd=.F.
  1313.     m.loop_flag=.F.
  1314.     m.loop_def=.F.
  1315.     DO delaybar WITH '','',5,.F.
  1316.     DO WHILE .T.
  1317.       DO esc_check
  1318.       m.loop_obj=.F.
  1319.       SCAN ALL FOR .NOT.DELETED()
  1320.         IF .NOT.EMPTY(wordsearch(m.c_delete))
  1321.           LOOP
  1322.         ENDIF
  1323.         =delrec()
  1324.         REPLACE COMMENT WITH strtranc(COMMENT,m.c_delete,m.m_delete)
  1325.       ENDSCAN
  1326.       IF m.r_scxdata>RECCOUNT()
  1327.         EXIT
  1328.       ENDIF
  1329.       m.match_drv=.F.
  1330.       IF m.gen_mode.AND..NOT.m.loop_flag.AND.a_scxdrvs(2)>0
  1331.         GOTO m.r_scxdata
  1332.         REPLACE REST SETUPCODE WITH COMMENT;
  1333.                 FOR OBJTYPE#1.AND..NOT.DELETED().AND..NOT.EMPTY(COMMENT)
  1334.         m.drv_no=2
  1335.         FOR m.i = 1 TO a_scxdrvs(2)
  1336.           m.msg3=PADR('['+ALLTRIM(m.platform_)+'] '+a_scxdrv(m.i,2),50)
  1337.           DO delaybar WITH '',m.msg3,90*m.i/a_scxdrvs(2)+5,.F.
  1338.           SCAN ALL FOR .NOT.DELETED()
  1339.             m.match_drv=.T.
  1340.             DO (a_scxdrv(m.i,2))
  1341.             DO esc_check
  1342.           ENDSCAN
  1343.           LOCATE
  1344.           SCATTER MEMVAR MEMO
  1345.         ENDFOR
  1346.         DO restoreenv
  1347.       ENDIF
  1348.       IF m.match_drv
  1349.         DO delaybar WITH '',m.msg2,5,.F.
  1350.       ENDIF
  1351.       m.match_drv=.F.
  1352.       IF m.gen_mode.AND.a_scxdrvs(3)>0
  1353.         m.drv_no=3
  1354.         FOR m.i = 1 TO a_scxdrvs(3)
  1355.           m.msg3=PADR('['+ALLTRIM(m.platform_)+'] '+a_scxdrv(m.i,3),50)
  1356.           DO delaybar WITH '',m.msg3,90*m.i/a_scxdrvs(3)+5,.F.
  1357.           SCAN ALL FOR .NOT.DELETED()
  1358.             m.match_drv=.T.
  1359.             DO (a_scxdrv(m.i,3))
  1360.             DO esc_check
  1361.           ENDSCAN
  1362.           LOCATE
  1363.           SCATTER MEMVAR MEMO
  1364.         ENDFOR
  1365.         DO restoreenv
  1366.       ENDIF
  1367.       IF m.match_drv
  1368.         DO delaybar WITH '',m.msg2,5,.F.
  1369.       ENDIF
  1370.       IF m.r_scxdata>RECCOUNT()
  1371.         EXIT
  1372.       ENDIF
  1373.       GOTO m.r_scxdata
  1374.       REPLACE REST COMMENT WITH SETUPCODE, SETUPCODE WITH '';
  1375.               FOR OBJTYPE#1.AND..NOT.DELETED().AND..NOT.EMPTY(SETUPCODE)
  1376.       GOTO m.r_scxdata
  1377.       m.obj_name=SPACE(LEN(FOXSCX.OBJNAME_))
  1378.       m.obj_base=SPACE(LEN(FOXSCX.OBJBASE_))
  1379.       m.obj_field=SPACE(LEN(FOXSCX.OBJFIELD_))
  1380.       m.obj_lib=SPACE(LEN(FOXSCX.OBJLIB_))
  1381.       SCAN ALL FOR .NOT.DELETED()
  1382.         m.obj_name=SPACE(LEN(FOXSCX.OBJNAME_))
  1383.         m.obj_base=SPACE(LEN(FOXSCX.OBJBASE_))
  1384.         m.obj_field=SPACE(LEN(FOXSCX.OBJFIELD_))
  1385.         m.obj_lib=SPACE(LEN(FOXSCX.OBJLIB_))
  1386.         IF m.memvarmode
  1387.           m.old_text=ALLTRIM(MLINE(NAME,1))
  1388.           m.at_pos=AT('.',m.old_text)
  1389.           m.new_text='m'+SUBSTR(m.old_text,m.at_pos)
  1390.           IF m.at_pos>0.AND.(m.at_pos#2.OR.;
  1391.              .NOT.UPPER(LEFT(m.old_text,2))=='M.').AND.;
  1392.              .NOT.m.old_text==m.new_text
  1393.             REPLACE NAME WITH m.new_text,;
  1394.                     WHEN WITH strtranc(WHEN,m.old_text,m.new_text),;
  1395.                     VALID WITH strtranc(VALID,m.old_text,m.new_text),;
  1396.                     MESSAGE WITH strtranc(MESSAGE,m.old_text,m.new_text),;
  1397.                     ERROR WITH strtranc(ERROR,m.old_text,m.new_text),;
  1398.                     RANGELO WITH strtranc(RANGELO,m.old_text,m.new_text),;
  1399.                     RANGEHI WITH strtranc(RANGEHI,m.old_text,m.new_text)
  1400.           ENDIF
  1401.         ENDIF
  1402.         IF m.lib_mode.AND..NOT.m.loop_flag.AND.ATC(m.c_defobj,COMMENT)>0
  1403.           m.at_line=ATCLINE(m.c_defobj,COMMENT)
  1404.           IF m.at_line>0
  1405.             FOR m.i = m.at_line TO MEMLINES(COMMENT)
  1406.               m.memline=ALLTRIM(MLINE(COMMENT,m.i))
  1407.               IF m.i>m.at_line.AND..NOT.'*:'$m.memline
  1408.                 m.at_pos=AT(m.cr,COMMENT,m.i)+1
  1409.                 IF m.at_pos=1.OR.ATC(m.c_defobj,SUBSTR(COMMENT,m.at_pos))=0
  1410.                   EXIT
  1411.                 ENDIF
  1412.                 LOOP
  1413.               ENDIF
  1414.               m.at_pos=ATC(m.c_defobj,m.memline)
  1415.               IF m.at_pos=1
  1416.                 m.obj_name=PADR(CHRTRAN(ALLTRIM(SUBSTR(m.memline,m.at_pos+;
  1417.                            LEN(m.c_defobj))),m.badchars,m.stdascii),;
  1418.                            LEN(FOXSCX.OBJNAME_))
  1419.                 EXIT
  1420.               ENDIF
  1421.             ENDFOR
  1422.           ENDIF
  1423.         ENDIF
  1424.         m.at_line=ATCLINE(m.c_basobj,COMMENT)
  1425.         IF m.at_line>0
  1426.           FOR m.i = m.at_line TO MEMLINES(COMMENT)
  1427.             m.memline=ALLTRIM(MLINE(COMMENT,m.i))
  1428.             IF m.i>m.at_line.AND..NOT.'*:'$m.memline
  1429.               m.at_pos=AT(m.cr,COMMENT,m.i)+1
  1430.               IF m.at_pos=1.OR.ATC(m.c_basobj,SUBSTR(COMMENT,m.at_pos))=0
  1431.                 EXIT
  1432.               ENDIF
  1433.               LOOP
  1434.             ENDIF
  1435.             m.at_pos=ATC(m.c_basobj,m.memline)
  1436.             IF m.at_pos=1
  1437.               m.obj_base=PADR(ALLTRIM(SUBSTR(m.memline,m.at_pos+;
  1438.                          LEN(m.c_basobj))),LEN(FOXSCX.OBJBASE_))
  1439.               EXIT
  1440.             ENDIF
  1441.           ENDFOR
  1442.         ENDIF
  1443.         IF OBJTYPE>=11
  1444.           m.obj_field=MLINE(NAME,1)
  1445.           m.obj_field=PADR(ALLTRIM(UPPER(SUBSTR(m.obj_field,AT('.',;
  1446.                       m.obj_field)+1))),LEN(FOXSCX.OBJFIELD_))
  1447.           IF m.baslibs>0.AND..NOT.EMPTY(m.obj_field)
  1448.             m.r=RECNO()
  1449.             SELECT FOXSCX
  1450.             SET ORDER TO OBJFIELD_
  1451.             m.lastexac=SET('EXACT')
  1452.             SET EXACT ON
  1453.             FOR m.i = 1 TO m.baslibs
  1454.               SEEK PADR(m.obj_field,LEN(OBJFIELD_))+;
  1455.                    PADR(a_baslib(m.i),LEN(OBJLIB_))
  1456.               IF .NOT.EOF()
  1457.                 m.obj_base=OBJNAME_
  1458.                 m.obj_lib=OBJLIB_
  1459.                 EXIT
  1460.               ENDIF
  1461.             ENDFOR
  1462.             IF m.lastexac=='ON'
  1463.               SET EXACT ON
  1464.             ELSE
  1465.               SET EXACT OFF
  1466.             ENDIF
  1467.             SELECT SCXDATA
  1468.             GOTO m.r
  1469.             IF EMPTY(m.obj_base).OR.ATC(m.m_basobj,COMMENT)>0.OR.;
  1470.                EMPTY(wordsearch(m.c_basobj))
  1471.               LOOP
  1472.             ENDIF
  1473.             REPLACE COMMENT WITH m.c_basobj+' '+m.obj_base+m.cr_lf+COMMENT
  1474.           ENDIF
  1475.         ENDIF
  1476.         IF .NOT.m.lib_mode.OR.EMPTY(m.obj_name)
  1477.           LOOP
  1478.         ENDIF
  1479.         m.lib_upd=.T.
  1480.         m.i=m.r_scxdata-2
  1481.         m.msg3=PADR('['+ALLTRIM(m.platform_)+'] '+ALLTRIM(m.lib_name)+'.'+;
  1482.                m.obj_name,50)
  1483.         DO delaybar WITH '',m.msg3,90*(RECNO()-m.i)/m.rec_total+5,.F.
  1484.         IF ATC(m.c_defobj,SETUPCODE)>0
  1485.           REPLACE SETUPCODE WITH strtranc(SETUPCODE,m.c_defobj,m.m_defobj)
  1486.         ENDIF
  1487.         REPLACE COMMENT WITH strtranc(COMMENT,m.c_defobj,m.m_defobj)
  1488.         DIMENSION a_fields(1)
  1489.         =AFIELDS(a_fields)
  1490.         RELEASE a_scatter
  1491.         SCATTER TO a_scatter MEMO
  1492.         SELECT FOXSCX
  1493.         SET ORDER TO OBJNAME_
  1494.         SEEK UPPER(m.obj_name+m.lib_name)
  1495.         IF EOF()
  1496.           INSERT BLANK
  1497.         ENDIF
  1498.         IF ALEN(a_scatter)=(FCOUNT()-m.fcountadj)
  1499.           GATHER FROM a_scatter MEMO
  1500.         ELSE
  1501.           m.lastexac=SET('EXACT')
  1502.           SET EXACT ON
  1503.           FOR m.i = 1 TO (FCOUNT()-m.fcountadj)
  1504.             m.j=ASCAN(a_fields,FIELD(m.i))
  1505.             IF m.j=0
  1506.               LOOP
  1507.             ENDIF
  1508.             REPLACE (FIELD(m.i)) WITH a_scatter(INT(m.j/4)+1)
  1509.           ENDFOR
  1510.           IF m.lastexac=='ON'
  1511.             SET EXACT ON
  1512.           ELSE
  1513.             SET EXACT OFF
  1514.           ENDIF
  1515.         ENDIF
  1516.         REPLACE PLATFORM WITH m.platform_, OBJNAME_ WITH m.obj_name,;
  1517.                 OBJBASE_ WITH m.obj_base, OBJFIELD_ WITH m.obj_field,;
  1518.                 OBJLIB_ WITH m.lib_name, OBJSCX_ WITH m.scx_name,;
  1519.                 OBJFLAG_ WITH .T.
  1520.         SELECT SCXDATA
  1521.       ENDSCAN
  1522.       SELECT SCXDATA
  1523.       IF m.r_scxdata>RECCOUNT()
  1524.         EXIT
  1525.       ENDIF
  1526.       GOTO m.r_scxdata
  1527.       IF .NOT.m.gen_mode
  1528.         EXIT
  1529.       ENDIF
  1530.       IF m.lib_upd.AND..NOT.m.loop_def
  1531.         DO delaybar WITH '',m.msg2,5,.F.
  1532.       ENDIF
  1533.       m.loop_def=.T.
  1534.       GOTO m.r_scxdata
  1535.       SCAN REST FOR .NOT.DELETED()
  1536.         m.at_pos=ATC(m.c_trntxt,COMMENT)
  1537.         IF m.at_pos=0
  1538.           LOOP
  1539.         ENDIF
  1540.         m.str_data=SUBSTR(COMMENT,m.at_pos)
  1541.         FOR m.i = 1 TO MEMLINES(m.str_data)
  1542.           m.memline=ALLTRIM(MLINE(m.str_data,m.i))
  1543.           m.at_pos=ATC(m.c_trntxt,m.memline)
  1544.           IF m.at_pos=1
  1545.             m.at_pos=AT('||',m.memline)
  1546.             IF m.at_pos=0
  1547.               LOOP
  1548.             ENDIF
  1549.             m.old_text=ALLTRIM(SUBSTR(m.memline,LEN(m.c_trntxt)+1,m.at_pos-;
  1550.                        LEN(m.c_trntxt)-1))
  1551.             IF LEN(m.old_text)=0
  1552.               LOOP
  1553.             ENDIF
  1554.             m.old_text=STRTRAN(STRTRAN(STRTRAN(STRTRAN(m.old_text,'\\',;
  1555.                        '\'),'\t',CHR(9)),'\n',CHR(10)),'\r',CHR(13))
  1556.             m.at_pos2=AT('||',m.memline,2)
  1557.             m.new_text=ALLTRIM(SUBSTR(m.memline,m.at_pos+2,;
  1558.                        IIF(m.at_pos2=0,LEN(m.memline),m.at_pos2-m.at_pos-2)))
  1559.             m.new_text=STRTRAN(STRTRAN(STRTRAN(STRTRAN(m.new_text,'\\',;
  1560.                        '\'),'\t',CHR(9)),'\n',CHR(10)),'\r',CHR(13))
  1561.             m.match_pos=.F.
  1562.             m.match_no=.F.
  1563.             IF m.at_pos2>0
  1564.               m.at_pos=AT('||',m.memline,3)
  1565.               m.match_pos=VAL(SUBSTR(m.memline,m.at_pos2+2,;
  1566.                           IIF(m.at_pos=0,LEN(m.memline),m.at_pos-m.at_pos2-2)))
  1567.               IF m.at_pos>0
  1568.                 m.match_no=VAL(SUBSTR(m.memline,m.at_pos+2))
  1569.               ENDIF
  1570.             ENDIF
  1571.             FOR m.j = 1 TO FCOUNT()
  1572.               m.field_name=FIELD(m.j)
  1573.               IF TYPE(m.field_name)#'M'
  1574.                 LOOP
  1575.               ENDIF
  1576.               m.field_eval=EVALUATE(m.field_name)
  1577.               IF m.field_name=='COMMENT'
  1578.                 m.at_pos=OCCURS('||',m.field_eval)
  1579.                 IF m.at_pos>0
  1580.                   m.at_pos=AT('||',m.field_eval,m.at_pos)
  1581.                   IF m.at_pos>0
  1582.                     REPLACE (m.field_name) WITH LEFT(m.field_eval,m.at_pos-1)+;
  1583.                             strtranc(SUBSTR(m.field_eval,m.at_pos),m.old_text,;
  1584.                             m.new_text,m.match_pos,m.match_no)
  1585.                   ENDIF
  1586.                 ENDIF
  1587.                 LOOP
  1588.               ENDIF
  1589.               IF ATC(m.old_text,m.field_eval)>0
  1590.                 REPLACE (m.field_name) WITH strtranc(m.field_eval,m.old_text,;
  1591.                                             m.new_text,m.match_pos,m.match_no)
  1592.               ENDIF
  1593.             ENDFOR
  1594.           ENDIF
  1595.         ENDFOR
  1596.       ENDSCAN
  1597.       IF m.r_scxdata>RECCOUNT()
  1598.         EXIT
  1599.       ENDIF
  1600.       SCAN ALL FOR .NOT.DELETED()
  1601.         IF evlrec()
  1602.           m.loop_obj=.T.
  1603.         ENDIF
  1604.       ENDSCAN
  1605.       IF m.r_scxdata>RECCOUNT()
  1606.         EXIT
  1607.       ENDIF
  1608.       GOTO m.r_scxdata
  1609.       SCAN REST FOR .NOT.DELETED()
  1610.         m.at_line=ATCLINE(m.c_if,COMMENT)
  1611.         IF m.at_line=0
  1612.           LOOP
  1613.         ENDIF
  1614.         FOR m.i = m.at_line TO MEMLINES(COMMENT)
  1615.           m.memline=ALLTRIM(MLINE(COMMENT,m.i))
  1616.           IF m.i>m.at_line.AND..NOT.'*:'$m.memline
  1617.             m.at_pos=AT(m.cr,COMMENT,m.i)+1
  1618.             IF m.at_pos=1.OR.ATC(m.c_if,SUBSTR(COMMENT,m.at_pos))=0
  1619.               EXIT
  1620.             ENDIF
  1621.             LOOP
  1622.           ENDIF
  1623.           m.at_pos=ATC(m.c_if,m.memline)
  1624.           IF m.at_pos=1
  1625.             m.obj_expr=ALLTRIM(SUBSTR(m.memline,m.at_pos+LEN(m.c_if)))
  1626.             IF EMPTY(m.obj_expr)
  1627.               LOOP
  1628.             ENDIF
  1629.             =insif2(m.obj_expr)
  1630.             REPLACE COMMENT WITH strtranc(COMMENT,m.c_if,m.m_if)
  1631.             EXIT
  1632.           ENDIF
  1633.         ENDFOR
  1634.       ENDSCAN
  1635.       IF m.r_scxdata>RECCOUNT()
  1636.         EXIT
  1637.       ENDIF
  1638.       GOTO m.r_scxdata
  1639.       SCAN REST FOR .NOT.DELETED()
  1640.         m.at_line=ATCLINE(m.c_insobj,COMMENT)
  1641.         IF m.at_line=0
  1642.           LOOP
  1643.         ENDIF
  1644.         FOR m.i = MEMLINES(COMMENT) TO m.at_line STEP -1
  1645.           =esc_check()
  1646.           m.memline=ALLTRIM(UPPER(MLINE(COMMENT,m.i)))
  1647.           m.at_pos=ATC(m.c_insobj,m.memline)
  1648.           IF m.at_pos=1
  1649.             m.obj_lib=''
  1650.             m.obj_name=PADR(ALLTRIM(SUBSTR(m.memline,m.at_pos+;
  1651.                        LEN(m.c_insobj))),LEN(FOXSCX.OBJNAME_))
  1652.             m.at_pos=AT('.',m.obj_name)
  1653.             IF m.at_pos>0
  1654.               m.obj_lib=PADR(UPPER(CHRTRAN(ALLTRIM(LEFT(m.obj_name,m.at_pos-1)),;
  1655.                         m.badchars,m.stdascii)),LEN(FOXSCX.OBJLIB_))
  1656.               m.obj_name=ALLTRIM(SUBSTR(m.obj_name,m.at_pos+1))
  1657.             ENDIF
  1658.             m.obj_name=PADR(CHRTRAN(m.obj_name,m.badchars,m.stdascii),;
  1659.                        LEN(FOXSCX.OBJNAME_))
  1660.             IF m.inclibs>0.AND.EMPTY(m.obj_lib)
  1661.               SELECT FOXSCX
  1662.               SET ORDER TO OBJNAME_
  1663.               m.lastexac=SET('EXACT')
  1664.               SET EXACT ON
  1665.               FOR m.j = 1 TO m.inclibs
  1666.                 SEEK UPPER(PADR(m.obj_name,LEN(OBJNAME_))+;
  1667.                      PADR(a_inclib(m.j),LEN(OBJLIB_)))
  1668.                 IF .NOT.EOF()
  1669.                   m.obj_lib=OBJLIB_
  1670.                   EXIT
  1671.                 ENDIF
  1672.               ENDFOR
  1673.               IF m.lastexac=='ON'
  1674.                 SET EXACT ON
  1675.               ELSE
  1676.                 SET EXACT OFF
  1677.               ENDIF
  1678.               SELECT SCXDATA
  1679.             ENDIF
  1680.             IF insobj(ALLTRIM(m.obj_lib)+'.'+ALLTRIM(m.obj_name))
  1681.               m.loop_obj=.T.
  1682.             ENDIF
  1683.           ENDIF
  1684.         ENDFOR
  1685.       ENDSCAN
  1686.       IF m.r_scxdata>RECCOUNT()
  1687.         EXIT
  1688.       ENDIF
  1689.       GOTO m.r_scxdata
  1690.       SCAN REST FOR .NOT.DELETED()
  1691.         m.at_line=ATCLINE(m.c_insscx,COMMENT)
  1692.         IF m.at_line=0
  1693.           LOOP
  1694.         ENDIF
  1695.         FOR m.i = MEMLINES(COMMENT) TO m.at_line STEP -1
  1696.           =esc_check()
  1697.           m.memline=ALLTRIM(MLINE(COMMENT,m.i))
  1698.           m.at_pos=ATC(m.c_insscx,m.memline)
  1699.           IF m.at_pos=1
  1700.             m.scx_file=ALLTRIM(SUBSTR(m.memline,m.at_pos+LEN(m.c_insscx)))
  1701.             DO CASE
  1702.               CASE m.insscxs>=256
  1703.                 =delrec()
  1704.               CASE insscx(m.scx_file)
  1705.                 m.loop_obj=.T.
  1706.                 m.insscxs=m.insscxs+1
  1707.               OTHERWISE
  1708.                 m.memline=m.scx_file
  1709.                 IF .NOT.'.'$m.memline
  1710.                   m.memline=m.memline+'.SCX'
  1711.                 ENDIF
  1712.             ENDCASE
  1713.           ENDIF
  1714.         ENDFOR
  1715.       ENDSCAN
  1716.       m.match_drv=.F.
  1717.       IF m.gen_mode.AND.a_scxdrvs(4)>0
  1718.         m.drv_no=4
  1719.         FOR m.i = 1 TO a_scxdrvs(4)
  1720.           m.msg3=PADR('['+ALLTRIM(m.platform_)+'] '+a_scxdrv(m.i,4),50)
  1721.           DO delaybar WITH '',m.msg3,90*m.i/a_scxdrvs(4)+5,.F.
  1722.           SCAN ALL FOR .NOT.DELETED()
  1723.             m.match_drv=.T.
  1724.             DO (a_scxdrv(m.i,4))
  1725.             DO esc_check
  1726.           ENDSCAN
  1727.           LOCATE
  1728.           SCATTER MEMVAR MEMO
  1729.         ENDFOR
  1730.         DO restoreenv
  1731.       ENDIF
  1732.       IF m.match_drv
  1733.         DO delaybar WITH '',m.msg2,5,.F.
  1734.       ENDIF
  1735.       IF m.r_scxdata>RECCOUNT()
  1736.         EXIT
  1737.       ENDIF
  1738.       GOTO m.r_scxdata
  1739.       SCAN REST FOR (OBJTYPE=5.OR.BETWEEN(OBJTYPE,11,22)).AND..NOT.DELETED()
  1740.         IF ATC(m.c_size,COMMENT)=0.AND.ATC(m.c_nosize,COMMENT)=0)
  1741.           LOOP
  1742.         ENDIF
  1743.         FOR m.i = 1 TO MEMLINES(COMMENT)
  1744.           m.memline=ALLTRIM(MLINE(COMMENT,m.i))
  1745.           m.at_pos=ATC(m.c_size,m.memline)
  1746.           IF m.at_pos=1
  1747.             m.obj_expr=ALLTRIM(SUBSTR(m.memline,m.at_pos+LEN(m.c_size)))
  1748.             IF EMPTY(m.obj_expr)
  1749.               LOOP
  1750.             ENDIF
  1751.             REPLACE SHOW WITH 'SIZE '+m.obj_expr, HEIGHT WITH m.scxcount+;
  1752.                     IIF(OBJTYPE#15.OR.OBJCODE#2,-100,800),;
  1753.                     WIDTH WITH RECNO()+256, SPACING WITH 0
  1754.             a_scxupd(m.scxcount)='*'
  1755.             REPLACE COMMENT WITH strtranc(COMMENT,m.c_size,m.m_size)
  1756.             EXIT
  1757.           ELSE
  1758.             m.at_pos=ATC(m.c_nosize,m.memline)
  1759.             IF m.at_pos=1
  1760.               IF OBJTYPE#15.OR.OBJCODE#2
  1761.                 REPLACE SHOW WITH '', HEIGHT WITH m.scxcount-100,;
  1762.                         WIDTH WITH RECNO()+256, SPACING WITH 0
  1763.                 a_scxupd(m.scxcount)='*'
  1764.                 REPLACE COMMENT WITH strtranc(COMMENT,m.c_nosize,m.m_nosize)
  1765.               ENDIF
  1766.               EXIT
  1767.             ENDIF
  1768.           ENDIF
  1769.         ENDFOR
  1770.       ENDSCAN
  1771.       IF m.r_scxdata>RECCOUNT()
  1772.         EXIT
  1773.       ENDIF
  1774.       GOTO m.r_scxdata
  1775.       SCAN REST FOR BETWEEN(OBJTYPE,11,22).AND..NOT.DELETED()
  1776.         m.at_line=ATCLINE(m.c_default,COMMENT)
  1777.         IF m.at_line=0
  1778.           LOOP
  1779.         ENDIF
  1780.         FOR m.i = m.at_line TO MEMLINES(COMMENT)
  1781.           m.memline=ALLTRIM(MLINE(COMMENT,m.i))
  1782.           IF m.i>m.at_line.AND..NOT.'*:'$m.memline
  1783.             m.at_pos=AT(m.cr,COMMENT,m.i)+1
  1784.             IF m.at_pos=1.OR.ATC(m.c_default,SUBSTR(COMMENT,m.at_pos))=0
  1785.               EXIT
  1786.             ENDIF
  1787.             LOOP
  1788.           ENDIF
  1789.           m.at_pos=ATC(m.c_default,m.memline)
  1790.           IF m.at_pos=1
  1791.             m.obj_expr=ALLTRIM(SUBSTR(m.memline,m.at_pos+LEN(m.c_default)))
  1792.             IF EMPTY(m.obj_expr)
  1793.               LOOP
  1794.             ENDIF
  1795.             DO CASE
  1796.               CASE BETWEEN(OBJTYPE,12,14)
  1797.                 REPLACE INITIALNUM WITH VAL(m.obj_expr)
  1798.               CASE OBJTYPE#11.AND.OBJTYPE#20
  1799.                 REPLACE INITIALVAL WITH m.obj_expr
  1800.             ENDCASE
  1801.             REPLACE COMMENT WITH strtranc(COMMENT,m.c_default,m.m_default)
  1802.             EXIT
  1803.           ENDIF
  1804.         ENDFOR
  1805.       ENDSCAN
  1806.       m.obj_name=SPACE(LEN(FOXSCX.OBJNAME_))
  1807.       m.obj_base=SPACE(LEN(FOXSCX.OBJBASE_))
  1808.       SCAN ALL FOR .NOT.DELETED()
  1809.         RELEASE a_basobj
  1810.         DIMENSION a_basobj(1)
  1811.         m.basobjs=0
  1812.         m.at_line=1
  1813.         DO WHILE .T.
  1814.           m.at_line=ATCLINE(m.c_basobj,COMMENT)
  1815.           IF .NOT.BETWEEN(m.at_line,1,MEMLINES(COMMENT))
  1816.             EXIT
  1817.           ENDIF
  1818.           m.obj_lib=''
  1819.           m.obj_base=SPACE(LEN(FOXSCX.OBJBASE_))
  1820.           FOR m.i = m.at_line TO MEMLINES(COMMENT)
  1821.             m.memline=ALLTRIM(MLINE(COMMENT,m.i))
  1822.             IF m.i>m.at_line.AND..NOT.'*:'$m.memline
  1823.               m.at_pos=AT(m.cr,COMMENT,m.i)+1
  1824.               IF m.at_pos=1.OR.ATC(m.c_basobj,SUBSTR(COMMENT,m.at_pos))=0
  1825.                 EXIT
  1826.               ENDIF
  1827.               LOOP
  1828.             ENDIF
  1829.             m.at_pos=ATC(m.c_basobj,m.memline)
  1830.             IF m.at_pos=0
  1831.               LOOP
  1832.             ENDIF
  1833.             REPLACE COMMENT WITH strtranc(COMMENT,m.c_basobj,m.m_basobj,1,1)
  1834.             IF m.at_pos=1
  1835.               m.obj_base=PADR(ALLTRIM(SUBSTR(m.memline,m.at_pos+;
  1836.                          LEN(m.c_basobj))),LEN(FOXSCX.OBJBASE_))
  1837.               m.at_pos=AT('.',m.obj_base)
  1838.               IF m.at_pos>0
  1839.                 m.obj_lib=PADR(UPPER(CHRTRAN(ALLTRIM(LEFT(m.obj_base,m.at_pos-1)),;
  1840.                           m.badchars,m.stdascii)),LEN(FOXSCX.OBJLIB_))
  1841.                 m.obj_base=ALLTRIM(SUBSTR(m.obj_base,m.at_pos+1))
  1842.               ENDIF
  1843.               m.obj_base=PADR(CHRTRAN(m.obj_base,m.badchars,m.stdascii),;
  1844.                          LEN(FOXSCX.OBJBASE_)-LEN(FOXSCX.OBJLIB_)-1)
  1845.               EXIT
  1846.             ENDIF
  1847.           ENDFOR
  1848.           IF EMPTY(m.obj_base)
  1849.             LOOP
  1850.           ENDIF
  1851.           m.match=.F.
  1852.           m.r=RECNO()
  1853.           RELEASE a_fields
  1854.           DIMENSION a_fields(1)
  1855.           =AFIELDS(a_fields)
  1856.           RELEASE a_scatter
  1857.           SCATTER TO a_scatter MEMO
  1858.           SELECT FOXSCX
  1859.           SET ORDER TO OBJNAME_
  1860.           IF m.inclibs=0.AND.EMPTY(m.obj_lib)
  1861.             =warning(m.c_basobj,m.obj_base)
  1862.             LOOP
  1863.           ENDIF
  1864.           RELEASE a_size,a_pict
  1865.           DO WHILE .NOT.EMPTY(m.obj_base).AND.(m.inclibs>0.OR.;
  1866.                    .NOT.EMPTY(m.obj_lib))
  1867.             DO esc_check
  1868.             m.j=0
  1869.             m.at_pos=AT('.',m.obj_base)
  1870.             IF m.at_pos>0
  1871.               m.obj_lib=PADR(UPPER(ALLTRIM(LEFT(m.obj_base,m.at_pos-1))),;
  1872.                         LEN(FOXSCX.OBJLIB_))
  1873.               m.obj_base=ALLTRIM(SUBSTR(m.obj_base,m.at_pos+1))
  1874.             ENDIF
  1875.             m.obj_base=PADR(m.obj_base,LEN(FOXSCX.OBJBASE_)-;
  1876.                        LEN(FOXSCX.OBJLIB_)-1)
  1877.             IF EMPTY(m.obj_lib)
  1878.               m.lastexac=SET('EXACT')
  1879.               SET EXACT ON
  1880.               FOR m.i = 1 TO m.inclibs
  1881.                 SEEK UPPER(PADR(m.obj_base,LEN(OBJNAME_))+PADR(a_inclib(m.i),;
  1882.                            LEN(OBJLIB_)))
  1883.                 IF .NOT.EOF()
  1884.                   m.j=RECNO()
  1885.                   m.obj_lib=OBJLIB_
  1886.                   m.obj_base=OBJBASE_
  1887.                   EXIT
  1888.                 ENDIF
  1889.               ENDFOR
  1890.               IF m.lastexac=='ON'
  1891.                 SET EXACT ON
  1892.               ELSE
  1893.                 SET EXACT OFF
  1894.               ENDIF
  1895.             ELSE
  1896.               SEEK UPPER(m.obj_base+m.obj_lib)
  1897.               IF .NOT.EOF()
  1898.                 m.j=RECNO()
  1899.                 m.obj_base=OBJBASE_
  1900.               ENDIF
  1901.             ENDIF
  1902.             IF m.j=0.OR.(UPPER(OBJNAME_)==PADR(m.obj_base,LEN(OBJNAME_)).AND.;
  1903.                (OBJLIB_==m.obj_lib.OR.EMPTY(m.obj_lib)))
  1904.               =warning(m.c_basobj,m.obj_lib+'.'+m.obj_base)
  1905.               m.obj_lib=''
  1906.               m.obj_base=SPACE(LEN(OBJBASE_))
  1907.               EXIT
  1908.             ENDIF
  1909.             IF m.basobjs>0.AND.ASCAN(a_basobj,OBJLIB_+'.'+UPPER(OBJNAME_))>0
  1910.               m.obj_lib=''
  1911.               m.obj_base=SPACE(LEN(OBJBASE_))
  1912.               EXIT
  1913.             ENDIF
  1914.             m.j=RECCOUNT('SCXDATA')
  1915.             IF m.rec_count#m.j
  1916.               m.rec_total=m.rec_total+(m.j-m.rec_count)
  1917.               m.rec_count=m.j
  1918.             ENDIF
  1919.             m.i=m.r_scxdata-2
  1920.             m.msg3=PADR('['+ALLTRIM(m.platform_)+'] '+ALLTRIM(OBJLIB_)+'.'+;
  1921.                    OBJNAME_,50)
  1922.             DO delaybar WITH '',m.msg3,85*(RECNO('SCXDATA')-m.i)/m.rec_total+10,.F.
  1923.             m.basobjs=m.basobjs+1
  1924.             DIMENSION a_basobj(m.basobjs)
  1925.             a_basobj(m.basobjs)=OBJLIB_+'.'+UPPER(OBJNAME_)
  1926.             m.basbefore=.F.
  1927.             m.old_text=''
  1928.             m.new_text=''
  1929.             FOR m.i = 1 TO ALEN(a_scatter)
  1930.               IF ALEN(a_scatter)=(FCOUNT()-m.fcountadj)
  1931.                 m.j=m.i
  1932.               ELSE
  1933.                 m.j=0
  1934.                 FOR m.k = 1 TO (FCOUNT()-m.fcountadj)
  1935.                   IF FIELD(m.k)==a_fields(4*m.i-3)
  1936.                     m.j=m.k
  1937.                     EXIT
  1938.                   ENDIF
  1939.                 ENDFOR
  1940.               ENDIF
  1941.               m.field_name=FIELD(m.j)
  1942.               IF m.field_name=='NAME'
  1943.                 m.old_text=NAME
  1944.                 m.new_text=a_scatter(m.i)
  1945.               ENDIF
  1946.               m.field_type=TYPE(FIELD(m.j))
  1947.               m.snpttype=-1
  1948.               IF m.i>6
  1949.                 IF ATC('TYPE',FIELD(m.j-1))>0.AND.;
  1950.                    .NOT.EMPTY(a_scatter(m.i))
  1951.                   m.snpttype=a_scatter(m.i-1)
  1952.                 ENDIF
  1953.                 IF RIGHT(m.field_name,4)=='BLUE'
  1954.                   m.field_eval=EVALUATE(m.field_name)
  1955.                   IF m.field_eval#-1.AND.a_scatter(m.i)=-1.AND.;
  1956.                      a_scatter(m.i-1)=-1.AND.a_scatter(m.i-2)=-1
  1957.                     a_scatter(m.i)=m.field_eval
  1958.                     a_scatter(m.i-1)=EVALUATE(FIELD(m.j-1))
  1959.                     a_scatter(m.i-2)=EVALUATE(FIELD(m.j-2))
  1960.                   ENDIF
  1961.                   LOOP
  1962.                 ENDIF
  1963.                 IF SCXDATA.OBJTYPE=1.AND.SCXDATA.STYLE>1.AND.;
  1964.                    INLIST(m.field_name,'SCHEME','SCHEME2','FLOAT','CLOSE',;
  1965.                           'MINIMIZE','BORDER','SHADOW')
  1966.                   LOOP
  1967.                 ENDIF
  1968.                 IF 'PEN'$m.field_name.OR.'FILL'$m.field_name
  1969.                   LOOP
  1970.                 ENDIF
  1971.                 IF LEFT(m.field_name,4)=='FONT'
  1972.                   IF m.field_name=='FONTSIZE'.AND.a_scatter(m.i)=8.AND.;
  1973.                      a_scatter(m.i-1)<=1.AND.;
  1974.                      a_scatter(m.i-2)=='MS Sans Serif'
  1975.                     a_scatter(m.i)=EVALUATE(m.field_name)
  1976.                     a_scatter(m.i-1)=EVALUATE(FIELD(m.j-1))
  1977.                     a_scatter(m.i-2)=EVALUATE(FIELD(m.j-2))
  1978.                   ENDIF
  1979.                   LOOP
  1980.                 ENDIF
  1981.                 IF 'FONT'$m.field_name
  1982.                   LOOP
  1983.                 ENDIF
  1984.               ENDIF
  1985.               IF (EMPTY(a_scatter(m.i)).OR.m.snpttype#-1.OR.;
  1986.                  m.field_type=='L'.OR.(FIELD(m.j)=='COMMENT'.AND.;
  1987.                  ATC(m.c_instxt,a_scatter(m.i))=0)).AND.;
  1988.                  ATC('TYPE',FIELD(m.j))=0.AND.;
  1989.                  .NOT.INLIST(FIELD(m.j),'VPOS','HPOS','HEIGHT','WIDTH').AND.;
  1990.                  (RECNO()>=m.r_scxdata.OR..NOT.INLIST(FIELD(m.j),'STYLE',;
  1991.                  'ORDER','UNIQUE','ENVIRON','TAG','TAG2'))
  1992.                 m.match=.T.
  1993.                 IF m.i>6.AND.ATC('TYPE',FIELD(m.j-1))>0.AND.;
  1994.                    .NOT.EMPTY(EVALUATE(FIELD(m.j)))
  1995.                   a_scatter(m.i-1)=EVALUATE(FIELD(m.j-1))
  1996.                 ENDIF
  1997.                 m.field_eval=EVALUATE(m.field_name)
  1998.                 IF m.i>5.AND.m.snpttype#-1.AND..NOT.EMPTY(m.field_eval).AND.;
  1999.                    m.snpttype#EVALUATE(FIELD(m.j-1))
  2000.                   SELECT SCXDATA
  2001.                   m.r2=RECNO()
  2002.                   LOCATE
  2003.                   m.memline=SYS(2015)
  2004.                   IF m.snpttype=1
  2005.                     REPLACE PROCCODE WITH PROCCODE+m.cr_lf+;
  2006.                            'FUNCTION '+m.memline+m.cr+lf+m.cr+lf+;
  2007.                            a_scatter(m.i)+m.cr_lf
  2008.                     a_scatter(m.i)=m.memline+'()'
  2009.                   ELSE
  2010.                     REPLACE PROCCODE WITH PROCCODE+m.cr_lf+;
  2011.                            'FUNCTION '+m.memline+m.cr+lf+m.cr+lf+;
  2012.                            m.field_eval+m.cr_lf
  2013.                     m.field_eval=m.memline+'()'
  2014.                   ENDIF
  2015.                   GOTO m.r2
  2016.                   SELECT FOXSCX
  2017.                   a_scatter(m.i-1)=0
  2018.                   m.snpttype=0
  2019.                 ENDIF
  2020.                 DO CASE
  2021.                   CASE EMPTY(m.field_eval)
  2022.                     =.F.
  2023.                   CASE (m.snpttype=-1.OR..NOT.m.field_type=='M').AND.;
  2024.                        .NOT.FIELD(m.j)=='COMMENT'
  2025.                     a_scatter(m.i)=m.field_eval
  2026.                   CASE m.snpttype=0.AND..NOT.FIELD(m.j)=='COMMENT'
  2027.                     IF LEFT(FIELD(m.j),5)=='RANGE'
  2028.                       =.F.
  2029.                     ELSE
  2030.                       m.field_eval=STRTRAN(STRTRAN(ALLTRIM(m.field_eval),;
  2031.                                    m.cr,''),m.lf,'')
  2032.                       a_scatter(m.i)=STRTRAN(STRTRAN(ALLTRIM(a_scatter(m.i)),;
  2033.                                    m.cr,''),m.lf,'')
  2034.                       DO CASE
  2035.                         CASE LEFT(m.field_eval,7)=='.T..OR.'.OR.;
  2036.                              LEFT(m.field_eval,7)=='.T. OR '
  2037.                           m.str_data=a_scatter(m.i)
  2038.                           m.str_data2=').OR.('
  2039.                           m.str_data3=SUBSTR(m.field_eval,8)
  2040.                         CASE RIGHT(m.field_eval,7)=='.OR..T.'.OR.;
  2041.                              RIGHT(m.field_eval,7)==' OR .T.'
  2042.                           m.str_data=a_scatter(m.i)
  2043.                           m.str_data2=').OR.('
  2044.                           m.str_data3=LEFT(m.field_eval,LEN(m.field_eval)-7)
  2045.                         CASE LEFT(a_scatter(m.i),7)=='.T..OR.'.OR.;
  2046.                              LEFT(a_scatter(m.i),7)=='.T. OR '
  2047.                           m.str_data=SUBSTR(a_scatter(m.i),8)
  2048.                           m.str_data2=').OR.('
  2049.                           m.str_data3=m.field_eval
  2050.                         CASE RIGHT(a_scatter(m.i),7)=='.OR..T.'.OR.;
  2051.                              RIGHT(a_scatter(m.i),7)==' OR .T.'
  2052.                           m.str_data=LEFT(a_scatter(m.i),LEN(a_scatter(m.i))-7)
  2053.                           m.str_data2=').OR.('
  2054.                           m.str_data3=m.field_eval
  2055.                         OTHERWISE
  2056.                           m.str_data=a_scatter(m.i)
  2057.                           m.str_data2=').AND.('
  2058.                           m.str_data3=m.field_eval
  2059.                       ENDCASE
  2060.                       IF m.basbefore
  2061.                         a_scatter(m.i)='('+m.str_data3+m.str_data2+;
  2062.                                        m.str_data+')'
  2063.                       ELSE
  2064.                         a_scatter(m.i)='('+m.str_data+m.str_data2+;
  2065.                                        m.str_data3+')'
  2066.                       ENDIF
  2067.                     ENDIF
  2068.                   OTHERWISE
  2069.                     SELECT SCXDATA
  2070.                     IF m.basbefore.AND..NOT.FIELD(m.j)=='COMMENT'
  2071.                       IF .NOT.RIGHT(m.field_eval,2)==m.cr_lf
  2072.                         m.field_eval=m.field_eval+m.cr_lf
  2073.                       ENDIF
  2074.                       a_scatter(m.i)=m.field_eval+a_scatter(m.i)
  2075.                     ELSE
  2076.                       IF .NOT.RIGHT(a_scatter(m.i),2)==m.cr_lf
  2077.                         a_scatter(m.i)=a_scatter(m.i)+m.cr_lf
  2078.                       ENDIF
  2079.                       a_scatter(m.i)=a_scatter(m.i)+m.field_eval
  2080.                     ENDIF
  2081.                     SELECT FOXSCX
  2082.                 ENDCASE
  2083.                 DO CASE
  2084.                   CASE FIELD(m.j)=='COMMENT'
  2085.                     SELECT SCXDATA
  2086.                     REPLACE COMMENT WITH a_scatter(m.i)
  2087.                     IF .NOT.wordsearch(m.c_basbefore)==m.null
  2088.                       m.basbefore=.T.
  2089.                       REPLACE COMMENT WITH strtranc(COMMENT,m.c_basbefore,;
  2090.                                            m.m_basbefore)
  2091.                       a_scatter(m.i)=COMMENT
  2092.                     ENDIF
  2093.                     IF .NOT.wordsearch(m.c_svsize)==m.null
  2094.                       RELEASE a_size
  2095.                       DIMENSION a_size(4)
  2096.                       a_size(1)=FOXSCX.HEIGHT
  2097.                       a_size(2)=FOXSCX.WIDTH
  2098.                       a_size(3)=FOXSCX.INITIALNUM
  2099.                       a_size(4)=FOXSCX.SPACING
  2100.                       REPLACE COMMENT WITH strtranc(COMMENT,m.c_svsize,;
  2101.                                            m.m_svsize)
  2102.                       a_scatter(m.i)=COMMENT
  2103.                     ENDIF
  2104.                     IF .NOT.wordsearch(m.c_svpict)==m.null
  2105.                       RELEASE a_pict
  2106.                       DIMENSION a_pict(3)
  2107.                       a_pict(1)=FOXSCX.PICTURE
  2108.                       a_pict(2)=FOXSCX.INITIALVAL
  2109.                       a_pict(3)=STR(FOXSCX.INITIALNUM,9,3)
  2110.                       REPLACE COMMENT WITH strtranc(COMMENT,m.c_svpict,;
  2111.                                            m.m_svpict)
  2112.                       a_scatter(m.i)=COMMENT
  2113.                     ENDIF
  2114.                     m.loop_obj=.T.
  2115.                     SELECT FOXSCX
  2116.                   CASE m.field_type=='M'.AND..NOT.EMPTY(m.new_text).AND.;
  2117.                        .NOT.m.old_text==m.new_text
  2118.                     a_scatter(m.i)=strtranc(a_scatter(m.i),m.old_text,;
  2119.                                    m.new_text)
  2120.                 ENDCASE
  2121.               ENDIF
  2122.             ENDFOR
  2123.           ENDDO
  2124.           SELECT SCXDATA
  2125.           GOTO m.r
  2126.           IF m.match
  2127.             GATHER FROM a_scatter MEMO
  2128.             IF TYPE('a_size')=='N'
  2129.               REPLACE HEIGHT WITH a_size(1)
  2130.               REPLACE WIDTH WITH a_size(2)
  2131.               IF OBJTYPE=15
  2132.                 REPLACE INITIALNUM WITH a_size(3)
  2133.               ENDIF
  2134.               REPLACE SPACING WITH a_size(4)
  2135.             ENDIF
  2136.             IF TYPE('a_pict')=='C'
  2137.               REPLACE PICTURE WITH a_pict(1)
  2138.               IF BETWEEN(OBJTYPE,12,14)
  2139.                 REPLACE INITIALVAL WITH a_pict(2)
  2140.                 REPLACE INITIALNUM WITH VAL(a_pict(3))
  2141.               ENDIF
  2142.             ENDIF
  2143.             RELEASE a_size,a_pict
  2144.             =evlrec()
  2145.           ENDIF
  2146.         ENDDO
  2147.       ENDSCAN
  2148.       m.match_drv=.F.
  2149.       IF m.gen_mode.AND.a_scxdrvs(5)>0
  2150.         m.drv_no=5
  2151.         FOR m.i = 1 TO a_scxdrvs(5)
  2152.           m.msg3=PADR('['+ALLTRIM(m.platform_)+'] '+a_scxdrv(m.i,5),50)
  2153.           DO delaybar WITH '',m.msg3,90*m.i/a_scxdrvs(5)+5,.F.
  2154.           SCAN ALL FOR .NOT.DELETED()
  2155.             m.match_drv=.T.
  2156.             DO (a_scxdrv(m.i,5))
  2157.             DO esc_check
  2158.           ENDSCAN
  2159.           LOCATE
  2160.           SCATTER MEMVAR MEMO
  2161.         ENDFOR
  2162.         DO restoreenv
  2163.       ENDIF
  2164.       IF m.match_drv
  2165.         DO delaybar WITH '',m.msg2,5,.F.
  2166.       ENDIF
  2167.       IF .NOT.m.loop_obj
  2168.         EXIT
  2169.       ENDIF
  2170.       IF .NOT.m.loop_flag
  2171.         m.loop_flag=.T.
  2172.         m.setfilter='(DEACTTYPE<=1.OR.OBJTYPE=1)'
  2173.         IF .NOT.EMPTY(m.lastfilter)
  2174.           m.setfilter=m.lastfilter+'.AND.'+m.setfilter
  2175.         ENDIF
  2176.         LOCATE
  2177.       ENDIF
  2178.       SCAN ALL FOR .NOT.DELETED()
  2179.         DO CASE
  2180.           CASE RECNO()<m.r_scxdata
  2181.             IF DEACTTYPE<=1
  2182.               REPLACE ACTIVTYPE WITH ACTIVTYPE+2, DEACTTYPE WITH DEACTTYPE+2
  2183.             ENDIF
  2184.           CASE ACTIVTYPE=2
  2185.             REPLACE ACTIVTYPE WITH 0, DEACTTYPE WITH 0
  2186.           CASE ATC(m.c_basobj,COMMENT)=0.AND.ATC(m.c_insobj,COMMENT)=0.AND.;
  2187.                ATC(m.c_insscx,COMMENT)=0.AND.ATC(m.c_trntxt,COMMENT)=0.AND.;
  2188.                ATC(m.c_if,COMMENT)=0.AND.ATC(m.c_size,COMMENT)=0.AND.;
  2189.                ATC(m.c_nosize,COMMENT)=0.AND.ATC(m.c_default,COMMENT)=0
  2190.             REPLACE DEACTTYPE WITH 2
  2191.         ENDCASE
  2192.       ENDSCAN
  2193.       SET FILTER TO &setfilter
  2194.       LOCATE
  2195.       IF EOF()
  2196.         EXIT
  2197.       ENDIF
  2198.       m.match_drv=.F.
  2199.       IF m.gen_mode.AND.a_scxdrvs(6)>0
  2200.         m.drv_no=6
  2201.         FOR m.i = 1 TO a_scxdrvs(6)
  2202.           m.msg3=PADR('['+ALLTRIM(m.platform_)+'] '+a_scxdrv(m.i,6),50)
  2203.           DO delaybar WITH '',m.msg3,90*m.i/a_scxdrvs(6)+5,.F.
  2204.           SCAN ALL FOR .NOT.DELETED()
  2205.             m.match_drv=.T.
  2206.             DO (a_scxdrv(m.i,6))
  2207.             DO esc_check
  2208.           ENDSCAN
  2209.           LOCATE
  2210.           SCATTER MEMVAR MEMO
  2211.         ENDFOR
  2212.         DO restoreenv
  2213.       ENDIF
  2214.       IF m.match_drv
  2215.         DO delaybar WITH '',m.msg2,5,.F.
  2216.       ENDIF
  2217.     ENDDO
  2218.     IF m.gen_mode
  2219.       DO delaybar WITH '',m.msg2,95,.F.
  2220.     ENDIF
  2221.     IF m.loop_flag
  2222.       IF EMPTY(m.lastfilter)
  2223.         SET FILTER TO
  2224.       ELSE
  2225.         SET FILTER TO &lastfilter
  2226.       ENDIF
  2227.       REPLACE ALL ACTIVTYPE WITH MAX(ACTIVTYPE-2,0),;
  2228.                   DEACTTYPE WITH MAX(DEACTTYPE-2,0)
  2229.     ENDIF
  2230.     SCAN ALL FOR .NOT.DELETED()
  2231.       IF .NOT.EMPTY(wordsearch(m.c_delete))
  2232.         LOOP
  2233.       ENDIF
  2234.       =delrec()
  2235.       REPLACE COMMENT WITH strtranc(COMMENT,m.c_delete,m.m_delete)
  2236.     ENDSCAN
  2237.     IF m.r_scxdata>RECCOUNT()
  2238.       EXIT
  2239.     ENDIF
  2240.     IF m.gen_mode
  2241.       GOTO m.r_scxdata
  2242.       SCAN REST FOR .NOT.DELETED()
  2243.         m.at_pos=ATC(m.c_trntxt,COMMENT)
  2244.         IF m.at_pos=0
  2245.           LOOP
  2246.         ENDIF
  2247.         m.str_data=SUBSTR(COMMENT,m.at_pos)
  2248.         FOR m.i = 1 TO MEMLINES(m.str_data)
  2249.           m.memline=ALLTRIM(MLINE(m.str_data,m.i))
  2250.           m.at_pos=ATC(m.c_trntxt,m.memline)
  2251.           IF m.at_pos=1
  2252.             m.at_pos=AT('||',m.memline)
  2253.             IF m.at_pos=0
  2254.               LOOP
  2255.             ENDIF
  2256.             m.old_text=ALLTRIM(SUBSTR(m.memline,LEN(m.c_trntxt)+1,m.at_pos-;
  2257.                        LEN(m.c_trntxt)-1))
  2258.             IF LEN(m.old_text)=0
  2259.               LOOP
  2260.             ENDIF
  2261.             m.old_text=STRTRAN(STRTRAN(STRTRAN(STRTRAN(m.old_text,'\\',;
  2262.                        '\'),'\t',CHR(9)),'\n',CHR(10)),'\r',CHR(13))
  2263.             m.at_pos2=AT('||',m.memline,2)
  2264.             m.new_text=ALLTRIM(SUBSTR(m.memline,m.at_pos+2,;
  2265.                        IIF(m.at_pos2=0,LEN(m.memline),m.at_pos2-m.at_pos-2)))
  2266.             m.new_text=STRTRAN(STRTRAN(STRTRAN(STRTRAN(m.new_text,'\\',;
  2267.                        '\'),'\t',CHR(9)),'\n',CHR(10)),'\r',CHR(13))
  2268.             m.match_pos=.F.
  2269.             m.match_no=.F.
  2270.             IF m.at_pos2>0
  2271.               m.at_pos=AT('||',m.memline,3)
  2272.               m.match_pos=VAL(SUBSTR(m.memline,m.at_pos2+2,;
  2273.                           IIF(m.at_pos=0,LEN(m.memline),m.at_pos-m.at_pos2-2)))
  2274.               IF m.at_pos>0
  2275.                 m.match_no=VAL(SUBSTR(m.memline,m.at_pos+2))
  2276.               ENDIF
  2277.             ENDIF
  2278.             REPLACE COMMENT WITH STRTRAN(COMMENT,m.memline+m.cr_lf,'')
  2279.             IF m.memline$COMMENT
  2280.               REPLACE COMMENT WITH STRTRAN(COMMENT,m.memline,'')
  2281.             ENDIF
  2282.             FOR m.j = 1 TO FCOUNT()
  2283.               m.field_name=FIELD(m.j)
  2284.               IF TYPE(m.field_name)#'M'
  2285.                 LOOP
  2286.               ENDIF
  2287.               m.field_eval=EVALUATE(m.field_name)
  2288.               IF ATC(m.old_text,m.field_eval)>0
  2289.                 REPLACE (m.field_name) WITH strtranc(m.field_eval,m.old_text,;
  2290.                                             m.new_text,m.match_pos,m.match_no)
  2291.               ENDIF
  2292.             ENDFOR
  2293.           ENDIF
  2294.         ENDFOR
  2295.       ENDSCAN
  2296.     ENDIF
  2297.     IF m.gen_mode.AND.m.name_mode
  2298.       SCAN ALL FOR .NOT.DELETED()
  2299.         FOR m.j = 1 TO FCOUNT()
  2300.           m.field_name=FIELD(m.j)
  2301.           m.field_type=TYPE(m.field_name)
  2302.           IF m.field_type#'M'
  2303.             LOOP
  2304.           ENDIF
  2305.           m.field_eval=EVALUATE(m.field_name)
  2306.           m.at_line=ATCLINE(m.p_name,m.field_eval)
  2307.           IF m.at_line=0
  2308.             LOOP
  2309.           ENDIF
  2310.           FOR m.i = m.at_line TO MEMLINES(m.field_eval)
  2311.             m.memline=ALLTRIM(MLINE(m.field_eval,m.i))
  2312.             IF m.i>m.at_line.AND..NOT.'*:'$m.memline
  2313.               m.at_pos=AT(m.cr,m.field_eval,m.i)+1
  2314.               IF m.at_pos=1.OR.ATC(m.p_name,SUBSTR(m.field_eval,m.at_pos))=0
  2315.                 EXIT
  2316.               ENDIF
  2317.               LOOP
  2318.             ENDIF
  2319.             m.at_pos=ATC(m.p_name,m.memline)
  2320.             IF m.at_pos=1
  2321.               m.snptname=ALLTRIM(UPPER(LEFT(CHRTRAN(STRTRAN(SUBSTR(m.memline,;
  2322.                          m.at_pos+LEN(m.p_name)),CHR(9),' '),m.badchars,;
  2323.                          m.stdascii),9)))
  2324.               IF EMPTY(m.snptname)
  2325.                 EXIT
  2326.               ENDIF
  2327.               m.snptname_=m.snptname+IIF(TYPE('PLATFORM')#'C','D',;
  2328.                           LEFT(PLATFORM,1))
  2329.               REPLACE (m.field_name) WITH STRTRAN(m.field_eval,m.memline,;
  2330.                                           m.p_name+' '+m.snptname_)
  2331.               m.fnctname='FUNCTION '+m.snptname+m.cr_lf
  2332.               m.r=RECNO()
  2333.               LOCATE
  2334.               IF m.fnctname$PROCCODE
  2335.                 GOTO m.r
  2336.                 EXIT
  2337.               ENDIF
  2338.               m.paramlist=''
  2339.               m.at_line=ATCLINE(m.s_para,m.field_eval)
  2340.               IF m.at_line>0
  2341.                 FOR m.k = m.at_line TO MEMLINES(m.field_eval)
  2342.                   m.memline=ALLTRIM(STRTRAN(MLINE(m.field_eval,m.k),;
  2343.                             CHR(9),' '))
  2344.                   IF m.k>m.at_line.AND..NOT.'*:'$m.memline
  2345.                     m.at_pos=AT(m.cr,m.field_eval,m.k)+1
  2346.                     IF m.at_pos=1.OR.ATC(m.c_s_para,;
  2347.                        SUBSTR(m.field_eval,m.at_pos))=0
  2348.                       EXIT
  2349.                     ENDIF
  2350.                     LOOP
  2351.                   ENDIF
  2352.                   m.at_pos=ATC(m.s_para,m.memline)
  2353.                   IF m.at_pos=1
  2354.                     m.at_pos=AT(' ',m.memline)
  2355.                     IF m.at_pos>0
  2356.                       m.paramlist=ALLTRIM(SUBSTR(m.memline,m.at_pos))
  2357.                       DO WHILE .T.
  2358.                         IF .NOT.RIGHT(m.paramlist,1)==';'
  2359.                           EXIT
  2360.                         ENDIF
  2361.                         m.paramlist=LEFT(m.paramlist,LEN(m.paramlist)-1)
  2362.                         m.k=m.k+1
  2363.                         IF m.k>MEMLINES(m.field_eval)
  2364.                           EXIT
  2365.                         ENDIF
  2366.                         m.paramlist=m.paramlist+ALLTRIM(STRTRAN(MLINE(;
  2367.                                     m.field_eval,m.k),CHR(9),' '))
  2368.                       ENDDO
  2369.                     ENDIF
  2370.                     EXIT
  2371.                   ENDIF
  2372.                 ENDFOR
  2373.               ENDIF
  2374.               m.new_text=m.cr_lf+m.cr_lf+m.fnctname+;
  2375.                          IIF(EMPTY(m.paramlist),'','PARAMETERS '+;
  2376.                          m.paramlist+m.cr_lf)+m.cr_lf+'DO CASE'+m.cr_lf
  2377.               FOR m.k = 1 TO 4
  2378.                 DO CASE
  2379.                   CASE m.k=1
  2380.                     m.new_text=m.new_text+'  CASE _DOS'+m.cr_lf+;
  2381.                                '    RETURN '+m.snptname+;
  2382.                                'D('+m.paramlist+')'+m.cr_lf
  2383.                   CASE m.k=2
  2384.                     m.new_text=m.new_text+'  CASE _WINDOWS'+m.cr_lf+;
  2385.                                '    RETURN '+m.snptname+;
  2386.                                'W('+m.paramlist+')'+m.cr_lf
  2387.                   CASE m.k=3
  2388.                     m.new_text=m.new_text+'  CASE _MAC'+m.cr_lf+;
  2389.                                '    RETURN '+m.snptname+;
  2390.                                'M('+m.paramlist+')'+m.cr_lf
  2391.                   CASE m.k=4
  2392.                     m.new_text=m.new_text+'  CASE _UNIX'+m.cr_lf+;
  2393.                                '    RETURN '+m.snptname+;
  2394.                                'U('+m.paramlist+')'+m.cr_lf
  2395.                 ENDCASE
  2396.               ENDFOR
  2397.               FOR m.k = 1 TO 4
  2398.                 m.fnctnames=m.fnctnames+1
  2399.                 DIMENSION a_fnctname(m.fnctnames,2)
  2400.                 a_fnctname(m.fnctnames,1)=m.snptname+SUBSTR('DWMU',m.k,1)
  2401.                 a_fnctname(m.fnctnames,2)=m.paramlist
  2402.               ENDFOR
  2403.               m.new_text=m.new_text+'ENDCASE'+m.cr_lf+'RETURN .F.'+m.cr_lf
  2404.               REPLACE PROCCODE WITH PROCCODE+m.new_text
  2405.               GOTO m.r
  2406.               EXIT
  2407.             ENDIF
  2408.           ENDFOR
  2409.         ENDFOR
  2410.       ENDSCAN
  2411.     ENDIF
  2412.     m.match_drv=.F.
  2413.     IF m.gen_mode.AND.a_scxdrvs(7)>0
  2414.       m.drv_no=7
  2415.       FOR m.i = 1 TO a_scxdrvs(7)
  2416.         m.msg3=PADR('['+ALLTRIM(m.platform_)+'] '+a_scxdrv(m.i,7),50)
  2417.         DO delaybar WITH '',m.msg3,90*m.i/a_scxdrvs(7)+5,.F.
  2418.         SCAN ALL FOR .NOT.DELETED()
  2419.           m.match_drv=.T.
  2420.           DO (a_scxdrv(m.i,7))
  2421.           DO esc_check
  2422.         ENDSCAN
  2423.         LOCATE
  2424.         SCATTER MEMVAR MEMO
  2425.       ENDFOR
  2426.       DO restoreenv
  2427.     ENDIF
  2428.     IF m.match_drv
  2429.       DO delaybar WITH '',m.msg2,96,.F.
  2430.     ENDIF
  2431.     IF m.gen_mode.OR.m.lib_mode
  2432.       IF .NOT.m.lib_mode
  2433.         LOCATE
  2434.         m.at_pos=ATC(m.c_section3,SETUPCODE)
  2435.         IF m.at_pos>0.AND..NOT.wordsearch(m.c_section3,.T.)==m.null
  2436.           m.memline=strtranc(SUBSTR(SETUPCODE,m.at_pos),m.c_section3,;
  2437.                     m.m_section3)
  2438.           REPLACE SETUPCODE WITH LEFT(SETUPCODE,m.at_pos-1)
  2439.           GOTO BOTTOM
  2440.           IF insrec()
  2441.             =instxt1(m.memline)
  2442.           ENDIF
  2443.           m.memline=''
  2444.           LOCATE
  2445.         ENDIF
  2446.         DO delaybar WITH '',m.msg2,96,.F.
  2447.       ENDIF
  2448.       RECALL ALL WHILE RECNO()<m.r_scxdata
  2449.       IF m.r_scxdata>RECCOUNT()
  2450.         m.i=0
  2451.       ELSE
  2452.         GOTO m.r_scxdata
  2453.         COUNT REST FOR DELETED() TO m.i
  2454.       ENDIF
  2455.       IF m.i>0
  2456.         GOTO m.r_scxdata
  2457.         SCAN REST FOR OBJTYPE#1.AND.DELETED()
  2458.           m.r=RECNO()
  2459.           SCAN REST FOR .NOT.DELETED().AND.VPOS<0.OR.HEIGHT<0
  2460.             IF VPOS<0
  2461.               REPLACE HPOS WITH HPOS-1
  2462.             ENDIF
  2463.             IF HEIGHT<0
  2464.               REPLACE WIDTH WITH WIDTH-1
  2465.             ENDIF
  2466.           ENDSCAN
  2467.           GOTO m.r
  2468.         ENDSCAN
  2469.         PACK
  2470.       ENDIF
  2471.       IF m.r_scxdata>RECCOUNT()
  2472.         EXIT
  2473.       ENDIF
  2474.       GOTO m.r_scxdata
  2475.       REPLACE REST COMMENT WITH SETUPCODE, SETUPCODE WITH '';
  2476.               FOR OBJTYPE#1.AND..NOT.DELETED().AND..NOT.EMPTY(SETUPCODE)
  2477.       IF m.gen_mode
  2478.         SCAN ALL FOR .NOT.DELETED()
  2479.           IF OBJTYPE>=32
  2480.             LOOP
  2481.           ENDIF
  2482.           m.i=ATCLINE(m.c_instxt,COMMENT)
  2483.           IF m.i=0
  2484.             LOOP
  2485.           ENDIF
  2486.           IF ATC(m.c_instxt,MLINE(COMMENT,m.i))#1
  2487.             LOOP
  2488.           ENDIF
  2489.           IF OBJTYPE<32
  2490.             REPLACE STYLE WITH 0
  2491.           ENDIF
  2492.           REPLACE OBJTYPE WITH 15, OBJCODE WITH 0, EXPR WITH '',;
  2493.                   VPOS WITH -m.scxcount, HPOS WITH RECNO()+256,;
  2494.                   HEIGHT WITH 1, WIDTH WITH 1, PICTURE WITH '',;
  2495.                   BOXCHAR WITH '', FILLCHAR WITH '', SCHEME WITH 0,;
  2496.                   SCHEME2 WITH -1, COLORPAIR WITH ''
  2497.           IF TYPE('PLATFORM')=='C'
  2498.             REPLACE PENRED WITH -1, PENGREEN WITH -1, PENBLUE WITH -1,;
  2499.                     FILLRED WITH -1, FILLGREEN WITH -1, FILLBLUE WITH -1,;
  2500.                     PENSIZE WITH -1, PENPAT WITH -1, FONTFACE WITH '',;
  2501.                     FONTSTYLE WITH 0, FONTSIZE WITH 0
  2502.           ENDIF
  2503.           a_scxupd(m.scxcount)='*'
  2504.           REPLACE COMMENT WITH strtranc(COMMENT,m.c_instxt,m.m_instxt)
  2505.         ENDSCAN
  2506.       ENDIF
  2507.       IF .NOT.m.lib_mode
  2508.         DO delaybar WITH '',m.msg2,97,.F.
  2509.       ENDIF
  2510.       SELECT FOXSCX
  2511.       SET ORDER TO OBJSCX_
  2512.       m.i=0
  2513.       SEEK m.scx_name+m.lib_name
  2514.       SCAN REST FOR .NOT.OBJFLAG_;
  2515.            WHILE OBJSCX_==m.scx_name.AND.OBJLIB_==m.lib_name
  2516.         m.i=1
  2517.         DELETE
  2518.       ENDSCAN
  2519.       IF m.i>0
  2520.         DO delaybar WITH '',PADR('Packing:  '+m.ffoxscx,50),99,.F.
  2521.         PACK
  2522.       ENDIF
  2523.       LOCATE
  2524.     ENDIF
  2525.     SELECT SCXDATA
  2526.     IF m.gen_mode
  2527.       GOTO m.r_scxdata
  2528.       SCAN REST FOR .NOT.DELETED()
  2529.         m.str_data=wordsearch(m.c_function)
  2530.         IF m.str_data=m.null.OR.EMPTY(m.str_data)
  2531.           LOOP
  2532.         ENDIF
  2533.         m.at_pos=ATC(m.c_function,COMMENT)
  2534.         m.new_str=SUBSTR(COMMENT,m.at_pos+2)
  2535.         m.at_pos=ATC(m.c_endfnct,m.new_str)
  2536.         IF m.at_pos>0
  2537.           m.new_str=LEFT(m.new_str,m.at_pos+LEN(m.c_endfnct)-1)+m.cr_lf
  2538.         ENDIF
  2539.         m.new_str=m.cr_lf+m.new_str+m.cr_lf
  2540.         m.r=RECNO()
  2541.         LOCATE
  2542.         IF ATC('FUNCTION '+m.str_data+m.cr_lf,m.cr_lf+PROCCODE+m.cr_lf)=0
  2543.           REPLACE PROCCODE WITH PROCCODE+m.new_str
  2544.         ELSE
  2545.           =warning(m.c_function+" '"+m.str_data+"' duplicated")
  2546.         ENDIF
  2547.         GOTO m.r
  2548.       ENDSCAN
  2549.       IF m.r_scxdata>RECCOUNT()
  2550.         EXIT
  2551.       ENDIF
  2552.     ENDIF
  2553.     m.match_drv=.F.
  2554.     IF m.gen_mode.AND.a_scxdrvs(8)>0
  2555.       m.drv_no=8
  2556.       FOR m.i = 1 TO a_scxdrvs(8)
  2557.         m.msg3=PADR('['+ALLTRIM(m.platform_)+'] '+a_scxdrv(m.i,8),50)
  2558.         DO delaybar WITH '',m.msg3,90*m.i/a_scxdrvs(8)+5,.F.
  2559.         SCAN ALL FOR .NOT.DELETED()
  2560.           m.match_drv=.T.
  2561.           DO (a_scxdrv(m.i,8))
  2562.           DO esc_check
  2563.         ENDSCAN
  2564.         LOCATE
  2565.         SCATTER MEMVAR MEMO
  2566.       ENDFOR
  2567.       DO restoreenv
  2568.     ENDIF
  2569.     IF m.match_drv
  2570.       DO delaybar WITH '',m.msg2,95,.F.
  2571.     ENDIF
  2572.     IF .NOT.m.gen_mode.AND..NOT.m.lib_mode
  2573.       EXIT
  2574.     ENDIF
  2575.     IF m.gen_mode
  2576.       m.i=0
  2577.       SCAN ALL FOR .NOT.DELETED()
  2578.         IF .NOT.EMPTY(wordsearch(m.c_delobj))
  2579.           LOOP
  2580.         ENDIF
  2581.         m.i=m.i+1
  2582.         =delrec()
  2583.       ENDSCAN
  2584.       IF m.i>0
  2585.         GOTO m.r_scxdata
  2586.         SCAN REST FOR OBJTYPE#1.AND.DELETED()
  2587.           m.r=RECNO()
  2588.           SCAN REST FOR .NOT.DELETED().AND.VPOS<0.OR.HEIGHT<0
  2589.             IF VPOS<0
  2590.               REPLACE HPOS WITH HPOS-1
  2591.             ENDIF
  2592.             IF HEIGHT<0
  2593.               REPLACE WIDTH WITH WIDTH-1
  2594.             ENDIF
  2595.           ENDSCAN
  2596.           GOTO m.r
  2597.         ENDSCAN
  2598.         PACK
  2599.       ENDIF
  2600.       IF m.r_scxdata>RECCOUNT()
  2601.         EXIT
  2602.       ENDIF
  2603.       LOCATE
  2604.       IF '*:'$SETUPCODE
  2605.         REPLACE SETUPCODE WITH STRTRAN(m.cr_lf+SETUPCODE,m.lf+'*:',m.lf+'*-:')
  2606.       ENDIF
  2607.       IF '*:'$SETUPCODE
  2608.         REPLACE SETUPCODE WITH STRTRAN(SETUPCODE,m.cr+'*:',m.cr+'*-:')
  2609.       ENDIF
  2610.     ENDIF
  2611.   ENDDO
  2612.   IF _WINDOWS
  2613.     SET MESSAGE TO ''
  2614.   ENDIF
  2615.   RELEASE a_scatter
  2616.   IF USED('SCXBASE')
  2617.     USE IN SCXBASE
  2618.   ENDIF
  2619.   IF .NOT.USED('SCXDATA')
  2620.     EXIT
  2621.   ENDIF
  2622.   SELECT SCXDATA
  2623.   SET FILTER TO
  2624.   LOCATE
  2625.   IF .NOT.USED('PJXDATA')
  2626.     EXIT
  2627.   ENDIF
  2628.   IF m.comp_flag
  2629.     DO delaybar WITH '',m.msg2,100,.F.
  2630.   ENDIF
  2631.   SELECT PJXDATA
  2632.   m.fscxbase=STRTRAN(m.fscxbase,m.null,'')
  2633.   IF m.fromproj
  2634.     LOCATE FOR TYPE=='s'.AND.trimpath(STRTRAN(MLINE(NAME,1),;
  2635.                m.null,''))==trimpath(m.fscxbase)
  2636.   ELSE
  2637.     LOCATE FOR TYPE=='s'.AND.trimpath(FULLPATH(STRTRAN(STRTRAN(MLINE(NAME,1),;
  2638.                '..\',''),m.null,'')))==trimpath(m.fscxbase)
  2639.   ENDIF
  2640.   IF EOF()
  2641.     EXIT
  2642.   ENDIF
  2643.   IF .NOT.EMPTY(m.fscxdata)
  2644.     REPLACE NAME WITH FULLPATH(m.fscxdata,NAME)
  2645.   ENDIF
  2646.   REPLACE TIMESTAMP WITH -1
  2647.   LOCATE FOR TYPE=='s'.AND.TIMESTAMP>=0.AND.;
  2648.              ASCAN(a_scxalias,trimpath(STRTRAN(MLINE(NAME,1),CHR(0),'')))=0
  2649.   IF EOF()
  2650.     EXIT
  2651.   ENDIF
  2652.   m.screenset=.T.
  2653.   m.fscxdata=''
  2654.   IF _FOX25
  2655.     m.platform_=''
  2656.   ENDIF
  2657. ENDDO
  2658. m.platform_=PADR(m.cplatform_,8)
  2659. IF USED('PJXBASE')
  2660.   USE IN PJXBASE
  2661. ENDIF
  2662. IF USED('PJXDATA')
  2663.   USE IN PJXDATA
  2664. ENDIF
  2665. SELECT (m.lastslct)
  2666. IF m.comp_flag
  2667.   DO delaybar WITH '','',0,.T.
  2668. ENDIF
  2669. DO esc_check
  2670. RETURN .T.
  2671.  
  2672. * END genscx
  2673.  
  2674.  
  2675.  
  2676. FUNCTION updspr
  2677. PARAMETER m.projdbf,m.recno
  2678. PRIVATE m.projdbf,m.recno,m.memline,m.memline2,m.at_pos,m.at_pos2,m.at_pos3
  2679. PRIVATE m.lastslct,m.decimals,m.find_str,m.i,m.j,m.k,m.n,m.scx_no,m.ascstr
  2680. PRIVATE m.finsert,m.insfiles,m.inscount,m.inspos,m.fnameold,m.fnamenew
  2681. PRIVATE m.scx_alias,m.new_text,m.match,m.rplatform_,m.inserttop
  2682.  
  2683. IF .NOT.TYPE('a_scxalias')=='C'
  2684.   RETURN .F.
  2685. ENDIF
  2686. m.lastslct=SELECT()
  2687. FOR m.i = 1 TO 16
  2688.   IF USED(a_scxalias(m.i))
  2689.     USE IN (a_scxalias(m.i))
  2690.   ENDIF
  2691. ENDFOR
  2692. IF USED('SCXDATA')
  2693.   USE IN SCXDATA
  2694. ENDIF
  2695. IF USED('SPRDATA')
  2696.   SELECT SPRDATA
  2697.   USE
  2698. ENDIF
  2699. IF m.scxcount=0
  2700.   SELECT (m.lastslct)
  2701.   RETURN .F.
  2702. ENDIF
  2703. CREATE CURSOR SPRDATA (SPR M, INS M)
  2704. INSERT BLANK
  2705. APPEND MEMO SPR FROM (m.fsprout) OVERWRITE
  2706. FOR m.scx_no = 1 TO m.scxcount
  2707.   IF TYPE('a_fscxdata(m.scx_no)')=='C'
  2708.     m.fscxdata=a_fscxdata(m.scx_no)
  2709.   ENDIF
  2710.   m.fnameold=ALLTRIM(UPPER(trimpath(m.fscxdata,.T.)))
  2711.   m.fnamenew=PADL(UPPER(trimpath(m.fsprout,.T.)),LEN(m.fnameold))
  2712.   IF m.fnameold$SPR
  2713.     REPLACE SPR WITH STRTRAN(SPR,m.fnameold,m.fnamenew)
  2714.   ENDIF
  2715. ENDFOR
  2716. IF '{{'$SPR
  2717.   REPLACE SPR WITH evltxt(SPR)
  2718. ENDIF
  2719. m.j=0
  2720. FOR m.i = 1 TO 6
  2721.   IF a_sprdrvs(m.i)>0
  2722.     m.j=m.i
  2723.     EXIT
  2724.   ENDIF
  2725. ENDFOR
  2726. IF m.j=0.AND.m.fnctnames=0.AND.AT(m.lf+'@ -',SPR)=0.AND.;
  2727.    ATC(m.c_insert,SPR)=0.AND.ATC(m.p_insert,SPR)=0.AND.ASCAN(a_scxupd,'*')=0
  2728.   COPY MEMO SPR TO (m.fsprout)
  2729.   SELECT (m.lastslct)
  2730.   RETURN .F.
  2731. ENDIF
  2732. IF _WINDOWS
  2733.   m.fsprout=LOWER(m.fsprout)
  2734.   SET MESSAGE TO PADR('Updating Screen Code: '+m.fsprout,79)
  2735. ELSE
  2736.   m.fsprout=UPPER(m.fsprout)
  2737. ENDIF
  2738. m.msg1=PADR('Updating Screen Code...',50)
  2739. m.msg2=PADR(m.fsprout,50)
  2740. DO delaybar WITH m.msg1,m.msg2,0,.T.
  2741. DO esc_check
  2742. SELECT SPRDATA
  2743. IF a_sprdrvs(1)>0
  2744.   m.drv_no=-1
  2745.   FOR m.i = 1 TO a_sprdrvs(1)
  2746.     DO (a_sprdrv(m.i,1))
  2747.     DO esc_check
  2748.     LOCATE
  2749.   ENDFOR
  2750.   DO restoreenv
  2751. ENDIF
  2752. SELECT SPRDATA
  2753. IF m.fnctnames>0
  2754.   FOR m.i = 1 TO m.fnctnames
  2755.     m.find_str=m.lf+'FUNCTION '+ALLTRIM(a_fnctname(m.i,1))+' '
  2756.     IF ATC(m.find_str,SPR)>0
  2757.       LOOP
  2758.     ENDIF
  2759.     m.memline=ALLTRIM(a_fnctname(m.i,2))
  2760.     REPLACE SPR WITH SPR+m.cr_lf+m.cr_lf+m.find_str+m.cr_lf+;
  2761.                      IIF(EMPTY(m.memline),'','PARAMETERS '+m.memline+;
  2762.                      m.cr_lf)+'RETURN .F.'+m.cr_lf
  2763.   ENDFOR
  2764. ENDIF
  2765. FOR m.scx_no = 1 TO m.scxcount
  2766.   IF USED('SCXDATA')
  2767.     SELECT SCXDATA
  2768.     USE
  2769.   ELSE
  2770.     SELECT 0
  2771.   ENDIF
  2772.   m.fscxdata=a_fscxdata(m.scx_no)
  2773.   USE (m.fscxdata) ALIAS SCXDATA
  2774.   SET FILTER TO .NOT.DELETED().AND.OBJTYPE#2.AND.OBJTYPE#10
  2775.   LOCATE
  2776.   IF a_sprdrvs(2)>0
  2777.     m.drv_no=-2
  2778.     FOR m.i = 1 TO a_sprdrvs(2)
  2779.       m.msg3=PADR(a_sprdrv(m.i,2),50)
  2780.       DO delaybar WITH '',m.msg3,90*m.i/a_sprdrvs(2)+5,.F.
  2781.       SCAN ALL
  2782.         DO (a_sprdrv(m.i,2))
  2783.         DO esc_check
  2784.       ENDSCAN
  2785.       LOCATE
  2786.       SCATTER MEMVAR MEMO
  2787.     ENDFOR
  2788.     DO restoreenv
  2789.   ENDIF
  2790.   DO delaybar WITH '',m.msg2,5,.F.
  2791.   SCAN ALL
  2792.     IF ATC(m.m_size,COMMENT)=0.AND.ATC(m.m_nosize,COMMENT)=0
  2793.       LOOP
  2794.     ENDIF
  2795.     DO delaybar WITH '','',20*RECNO()/RECCOUNT(),.F.
  2796.     DO esc_check
  2797.     IF TYPE('PLATFORM')=='C'
  2798.       m.rplatform=ALLTRIM(PLATFORM)
  2799.     ELSE
  2800.       m.rplatform='DOS'
  2801.     ENDIF
  2802.     DO CASE
  2803.       CASE m.rplatform=='DOS'
  2804.         m.decimals=0
  2805.       CASE m.rplatform=='WINDOWS'
  2806.         m.decimals=3
  2807.       CASE m.rplatform=='MAC'
  2808.         m.decimals=3
  2809.       CASE m.rplatform=='UNIX'
  2810.         m.decimals=0
  2811.       OTHERWISE
  2812.         m.decimals=0
  2813.     ENDCASE
  2814.     FOR m.n = 1 TO IIF(OBJTYPE=15.AND.OBJCODE=0.AND.REFRESH,2,1)
  2815.       FOR m.j = 1 TO 3
  2816.         DO CASE
  2817.           CASE m.j=1
  2818.             m.ascstr=' '
  2819.           CASE m.j=2
  2820.             m.ascstr=','
  2821.           OTHERWISE
  2822.             m.ascstr=''
  2823.         ENDCASE
  2824.         m.find_str='SIZE '+ALLTRIM(STR(m.scx_no+IIF(OBJTYPE#15.OR.;
  2825.                    OBJCODE#2,-100,800),4))+IIF(m.decimals=0,'','.'+;
  2826.                    REPLICATE('0',m.decimals))+','+;
  2827.                    ALLTRIM(STR(RECNO()+256,10,m.decimals))+m.ascstr
  2828.         m.i=ATCLINE(m.find_str,SPRDATA.SPR)
  2829.         IF m.i=0
  2830.           LOOP
  2831.         ENDIF
  2832.         m.at_pos=ATC(m.find_str,SPRDATA.SPR)
  2833.         m.memline=MLINE(SPRDATA.SPR,m.i)
  2834.         m.k=0
  2835.         IF EMPTY(SHOW)
  2836.           IF RIGHT(m.memline,1)==';'
  2837.             m.memline=m.memline+m.cr_lf
  2838.           ELSE
  2839.             m.memline=';'+m.cr_lf+m.memline+m.cr_lf
  2840.             m.at_pos=m.at_pos-OCCURS(CHR(9),m.memline)-3
  2841.             m.k=1
  2842.           ENDIF
  2843.         ELSE
  2844.           m.memline=STRTRAN(m.memline,CHR(9),'')
  2845.           IF RIGHT(m.memline,1)==';'
  2846.             m.memline=LEFT(m.memline,LEN(m.memline)-1)
  2847.           ENDIF
  2848.         ENDIF
  2849.         m.new_text=IIF(EMPTY(SHOW),'',ALLTRIM(MLINE(SHOW,1))+' ')+;
  2850.                    IIF(m.k=0,'',m.cr_lf)
  2851.         REPLACE SPRDATA.SPR WITH LEFT(SPRDATA.SPR,m.at_pos-1)+m.new_text+;
  2852.                                  SUBSTR(SPRDATA.SPR,m.at_pos+LEN(m.memline))
  2853.         EXIT
  2854.       ENDFOR
  2855.     ENDFOR
  2856.   ENDSCAN
  2857.   m.match=.F.
  2858.   IF a_sprdrvs(3)>0
  2859.     m.drv_no=-3
  2860.     FOR m.i = 1 TO a_sprdrvs(3)
  2861.       m.msg3=PADR(a_sprdrv(m.i,3),50)
  2862.       DO delaybar WITH '',m.msg3,90*m.i/a_sprdrvs(3)+5,.F.
  2863.       SCAN ALL
  2864.         m.match=.T.
  2865.         DO (a_sprdrv(m.i,3))
  2866.         DO esc_check
  2867.       ENDSCAN
  2868.       LOCATE
  2869.       SCATTER MEMVAR MEMO
  2870.     ENDFOR
  2871.     DO restoreenv
  2872.   ENDIF
  2873.   IF m.match
  2874.     DO delaybar WITH '',m.msg2,20,.F.
  2875.   ENDIF
  2876.   SCAN ALL
  2877.     IF ATC(m.m_instxt,COMMENT)=0
  2878.       LOOP
  2879.     ENDIF
  2880.     DO delaybar WITH '','',70*RECNO()/RECCOUNT()+20,.F.
  2881.     DO esc_check
  2882.     IF TYPE('PLATFORM')=='C'
  2883.       m.rplatform=ALLTRIM(PLATFORM)
  2884.     ELSE
  2885.       m.rplatform='DOS'
  2886.     ENDIF
  2887.     DO CASE
  2888.       CASE m.rplatform=='DOS'
  2889.         m.decimals=0
  2890.       CASE m.rplatform=='WINDOWS'
  2891.         m.decimals=3
  2892.       CASE m.rplatform=='MAC'
  2893.         m.decimals=3
  2894.       CASE m.rplatform=='UNIX'
  2895.         m.decimals=0
  2896.       OTHERWISE
  2897.         m.decimals=0
  2898.     ENDCASE
  2899.     FOR m.n = 1 TO IIF(OBJTYPE#15.OR.OBJCODE#0.OR..NOT.REFRESH,1,2)
  2900.       m.find_str='@ '+ALLTRIM(STR(-m.scx_no,4))+IIF(m.decimals=0,'','.'+;
  2901.                  REPLICATE('0',m.decimals))
  2902.       m.find_str=m.find_str+','+ALLTRIM(STR(RECNO()+256,10,m.decimals))+' '
  2903.       m.i=ATCLINE(m.find_str,SPRDATA.SPR)
  2904.       IF m.i=0
  2905.         LOOP
  2906.       ENDIF
  2907.       m.at_pos=ATC(m.find_str,SPRDATA.SPR)
  2908.       m.memline=MLINE(SPRDATA.SPR,m.i)+m.cr_lf
  2909.       FOR m.j = 1 TO 5
  2910.         m.memline2=ALLTRIM(MLINE(SPRDATA.SPR,m.i+m.j))
  2911.         IF INLIST(UPPER(LEFT(STRTRAN(m.memline2,CHR(9),''),4)),'SIZE','PEN ',;
  2912.                   'STYL','FONT','COLO')
  2913.           m.memline=m.memline+m.memline2+m.cr_lf
  2914.         ELSE
  2915.           EXIT
  2916.         ENDIF
  2917.       ENDFOR
  2918.       m.find_str=m.m_instxt
  2919.       m.at_pos2=ATC(m.find_str,COMMENT)
  2920.       IF m.at_pos2=0
  2921.         m.new_text=''
  2922.       ELSE
  2923.         m.memline2=ALLTRIM(SUBSTR(COMMENT,m.at_pos2+LEN(m.find_str)+1))
  2924.         m.at_pos3=ATC(m.c_endtxt,m.memline2)
  2925.         IF m.at_pos3>0
  2926.           m.memline2=LEFT(m.memline2,m.at_pos3+LEN(m.c_endtxt)-1)+m.cr_lf
  2927.         ENDIF
  2928.         IF m.outtxt=='ON'
  2929.           m.new_text=m.cr_lf+'** Start of inserted text'+m.cr_lf+;
  2930.                      m.memline2+m.cr_lf+m.cr_lf+'** End of inserted text'+m.cr_lf
  2931.         ELSE
  2932.           m.new_text=m.memline2+m.cr_lf
  2933.         ENDIF
  2934.       ENDIF
  2935.       REPLACE SPRDATA.SPR WITH LEFT(SPRDATA.SPR,m.at_pos-1)+m.new_text+;
  2936.                                SUBSTR(SPRDATA.SPR,m.at_pos+LEN(m.memline)-1)
  2937.     ENDFOR
  2938.   ENDSCAN
  2939.   IF a_sprdrvs(4)>0
  2940.     m.drv_no=-4
  2941.     FOR m.i = 1 TO a_sprdrvs(4)
  2942.       m.msg3=PADR(a_sprdrv(m.i,4),50)
  2943.       DO delaybar WITH '',m.msg3,90*m.i/a_sprdrvs(4)+5,.F.
  2944.       SCAN ALL
  2945.         DO (a_sprdrv(m.i,4))
  2946.         DO esc_check
  2947.       ENDSCAN
  2948.       LOCATE
  2949.       SCATTER MEMVAR MEMO
  2950.     ENDFOR
  2951.     DO restoreenv
  2952.   ENDIF
  2953.   DO delaybar WITH '','',90,.F.
  2954.   IF USED('SCXDATA')
  2955.     SELECT SCXDATA
  2956.     USE
  2957.   ENDIF
  2958. ENDFOR
  2959. SELECT SPRDATA
  2960. m.find_str='@ -'
  2961. DO WHILE .T.
  2962.   DO esc_check
  2963.   m.i=ATCLINE(m.find_str,SPR)
  2964.   IF m.i=0
  2965.     EXIT
  2966.   ENDIF
  2967.   m.at_pos=ATC(m.find_str,SPR)
  2968.   m.memline=MLINE(SPR,m.i)+m.cr_lf
  2969.   FOR m.j = 1 TO 5
  2970.     m.memline2=ALLTRIM(MLINE(SPR,m.i+m.j))
  2971.     IF INLIST(UPPER(LEFT(STRTRAN(m.memline2,CHR(9),''),4)),'SIZE','PEN ',;
  2972.               'STYL','FONT','COLO')
  2973.       m.memline=m.memline+m.memline2+m.cr_lf
  2974.     ELSE
  2975.       EXIT
  2976.     ENDIF
  2977.   ENDFOR
  2978.   REPLACE SPR WITH LEFT(SPR,m.at_pos-1)+SUBSTR(SPR,m.at_pos+LEN(m.memline)-1)
  2979. ENDDO
  2980. m.match=.F.
  2981. IF a_sprdrvs(5)>0
  2982.   m.drv_no=-5
  2983.   FOR m.i = 1 TO a_sprdrvs(5)
  2984.     m.msg3=PADR(a_sprdrv(m.i,5),50)
  2985.     DO delaybar WITH '',m.msg3,90*m.i/a_sprdrvs(5)+5,.F.
  2986.     SCAN ALL
  2987.       m.match=.T.
  2988.       DO (a_sprdrv(m.i,5))
  2989.       DO esc_check
  2990.     ENDSCAN
  2991.     LOCATE
  2992.     SCATTER MEMVAR MEMO
  2993.   ENDFOR
  2994.   DO restoreenv
  2995. ENDIF
  2996. IF m.match
  2997.   DO delaybar WITH '',m.msg2,90,.F.
  2998. ENDIF
  2999. DIMENSION a_insfile(1)
  3000. m.insfiles=0
  3001. m.at_pos2=1
  3002. FOR m.k = 1 TO 2
  3003.   m.find_str=IIF(m.k=1,m.c_insert,m.p_insert)
  3004.   DO WHILE .T.
  3005.     DO esc_check
  3006.     m.at_pos=ATC(m.find_str,SUBSTR(SPR,m.at_pos2))
  3007.     IF m.at_pos=0
  3008.       EXIT
  3009.     ENDIF
  3010.     m.at_pos=m.at_pos+m.at_pos2-1
  3011.     m.inserttop=(m.k=1.AND.UPPER(SUBSTR(SPR,m.at_pos,11))==m.c_insert+'TOP')
  3012.     m.at_pos=m.at_pos-2
  3013.     m.ascstr=ASC(SUBSTR(SPR,m.at_pos-1,1))
  3014.     IF m.ascstr=10.OR.m.ascstr=13
  3015.       m.at_pos=m.at_pos-1
  3016.     ENDIF
  3017.     m.j=LEN(m.find_str)
  3018.     FOR m.i = 1 TO 2
  3019.       IF EMPTY(SUBSTR(SPR,m.at_pos+m.i,1))
  3020.         EXIT
  3021.       ENDIF
  3022.       m.j=m.j+1
  3023.     ENDFOR
  3024.     m.at_pos3=0
  3025.     FOR m.i = -m.j TO m.j
  3026.       m.memline=MLINE(SPR,1,m.at_pos)
  3027.       m.at_pos3=ATC(m.find_str,m.memline)
  3028.       IF m.at_pos3>0
  3029.         EXIT
  3030.       ENDIF
  3031.       m.at_pos=m.at_pos+1
  3032.     ENDFOR
  3033.     m.memline2=IIF(m.at_pos3>0,ALLTRIM(STRTRAN(m.memline,CHR(9),' ')),'')
  3034.     IF ATC(m.find_str,m.memline2)#1
  3035.       m.at_pos2=m.at_pos+LEN(m.memline)+2
  3036.       LOOP
  3037.     ENDIF
  3038.     IF m.ascstr=10.OR.m.ascstr=13
  3039.       m.memline=m.memline+' '
  3040.     ENDIF
  3041.     m.at_pos=m.at_pos+1
  3042.     m.j=0
  3043.     FOR m.i = 1 TO 256
  3044.       m.ascstr=ASC(SUBSTR(SPR,m.at_pos-m.i,1))
  3045.       IF m.ascstr=10.OR.m.ascstr=13.OR.(m.at_pos-m.i)<=0
  3046.         EXIT
  3047.       ENDIF
  3048.       m.j=-1
  3049.     ENDFOR
  3050.     IF m.j=-1.OR.m.i>256
  3051.       m.at_pos2=m.at_pos+LEN(m.memline)+2
  3052.       LOOP
  3053.     ENDIF
  3054.     m.finsert=ALLTRIM(SUBSTR(m.memline2,AT(' ',m.memline2)))
  3055.     DO WHILE RIGHT(m.finsert,1)==m.cr.OR.RIGHT(m.finsert,1)==m.lf
  3056.       DO esc_check
  3057.       m.finsert=LEFT(m.finsert,LEN(m.finsert)-1)
  3058.     ENDDO
  3059.     IF FILE(m.finsert)
  3060.       m.inscount=0
  3061.       m.inspos=ASCAN(a_insfile,m.finsert)
  3062.       DO WHILE m.inspos>0.AND.m.inscount<256
  3063.         m.inscount=m.inscount+1
  3064.         m.inspos=ASCAN(a_insfile,m.finsert,m.inspos+1)
  3065.       ENDDO
  3066.       IF m.inscount>256
  3067.         REPLACE SPR WITH LEFT(SPR,m.at_pos-1)+'*'+SUBSTR(SPR,m.at_pos)
  3068.         m.at_pos2=m.at_pos+LEN(m.memline)+2
  3069.         LOOP
  3070.       ENDIF
  3071.       m.insfiles=m.insfiles+1
  3072.       DIMENSION a_insfile(m.insfiles)
  3073.       a_insfile(m.insfiles)=m.finsert
  3074.       APPEND MEMO INS FROM (m.finsert) OVERWRITE
  3075.       m.new_text=INS
  3076.       m.new_text='** Start of inserted file '+m.finsert+;
  3077.                  ' ƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒstart'+m.cr_lf+;
  3078.                  m.new_text+m.cr_lf+'** End of inserted file '+;
  3079.                  m.finsert+' ƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒend'+;
  3080.                  m.cr_lf
  3081.     ELSE
  3082.       =warning(m.c_insert,m.finsert)
  3083.       m.new_text='*'+m.cr_lf+'* Inserted file '+m.finsert+' not found!'+;
  3084.                  cr_lf+'*'+m.cr_lf
  3085.     ENDIF
  3086.     m.i=LEN(m.memline)
  3087.     IF m.inserttop
  3088.       m.memline=ALLTRIM(m.memline)+m.cr_lf
  3089.       REPLACE SPR WITH LEFT(SPR,m.at_pos-1)+m.cr_lf+;
  3090.                        strtranc(SUBSTR(SPR,m.at_pos+m.i+1),m.memline,m.cr_lf)
  3091.       m.at_pos3=ATC(m.cr_lf+m.cr_lf,SPR)
  3092.       IF m.at_pos3=0.OR.m.at_pos3>=m.at_pos.OR.;
  3093.          (m.at_pos3>=ATC(m.cr_lf+'DO CASE',SPR).AND.;
  3094.          m.at_pos3>=ATC(m.cr_lf+'#REGION 1',SPR))
  3095.         m.at_pos3=1
  3096.       ELSE
  3097.         m.at_pos3=m.at_pos3+2
  3098.       ENDIF
  3099.       REPLACE SPR WITH LEFT(SPR,m.at_pos3-1)+m.cr_lf+m.new_text+;
  3100.                        SUBSTR(SPR,m.at_pos3)
  3101.       m.at_pos2=1
  3102.     ELSE
  3103.       REPLACE SPR WITH LEFT(SPR,m.at_pos-1)+m.new_text+;
  3104.                        SUBSTR(SPR,m.at_pos+m.i+1)
  3105.     ENDIF
  3106.   ENDDO
  3107. ENDFOR
  3108. DO delaybar WITH '','',95,.F.
  3109. IF '{{'$SPR
  3110.   REPLACE SPR WITH evltxt(SPR)
  3111. ENDIF
  3112. m.match=.F.
  3113. IF a_sprdrvs(6)>0
  3114.   m.drv_no=-6
  3115.   FOR m.i = 1 TO a_sprdrvs(6)
  3116.     m.msg3=PADR(a_sprdrv(m.i,6),50)
  3117.     DO delaybar WITH '',m.msg3,90*m.i/a_sprdrvs(6)+5,.F.
  3118.     SCAN ALL
  3119.       m.match=.T.
  3120.       DO (a_sprdrv(m.i,6))
  3121.       DO esc_check
  3122.     ENDSCAN
  3123.     LOCATE
  3124.     SCATTER MEMVAR MEMO
  3125.   ENDFOR
  3126.   DO restoreenv
  3127. ENDIF
  3128. IF m.match
  3129.   DO delaybar WITH '',m.msg2,95,.F.
  3130. ENDIF
  3131. COPY MEMO SPR TO (m.fsprout)
  3132. DO delaybar WITH '','',100,.F.
  3133. IF _WINDOWS
  3134.   SET MESSAGE TO ''
  3135. ENDIF
  3136. SELECT (m.lastslct)
  3137. DO delaybar WITH '','',0,.T.
  3138. DO esc_check
  3139. RETURN .T.
  3140.  
  3141. * END updspr
  3142.  
  3143.  
  3144.  
  3145. FUNCTION openfoxscx
  3146. PRIVATE m.i,m.configfile
  3147.  
  3148. IF USED('FOXSCX')
  3149.   SELECT FOXSCX
  3150.   LOCATE
  3151.   RETURN .T.
  3152. ENDIF
  3153. IF FILE(m.ffoxscx)
  3154.   SELECT 0
  3155.   USE (m.ffoxscx) ALIAS FOXSCX
  3156.   IF (.NOT._FOX25.OR..NOT.USED('SCXBASE').OR.;
  3157.      FCOUNT('SCXBASE')=(FCOUNT()-m.fcountadj)).AND.;
  3158.      LEN(OBJFIELD_)=24
  3159.     USE
  3160.   ELSE
  3161.     m.ffoxscx2=FULLPATH(uniquefile(),m.ffoxscx)
  3162.     SELECT * FROM FOXSCX INTO TABLE (m.ffoxscx2)
  3163.     USE
  3164.     SELECT FOXSCX
  3165.     USE
  3166.     =erasedbf(m.ffoxscx,'FOXSCX')
  3167.   ENDIF
  3168. ENDIF
  3169. IF FILE(m.ffoxscx).OR..NOT.USED('SCXBASE')
  3170.   IF USED('FOXSCX')
  3171.     SELECT FOXSCX
  3172.   ELSE
  3173.     IF .NOT.FILE(m.ffoxscx)
  3174.       RETURN .F.
  3175.     ENDIF
  3176.     SELECT 0
  3177.     USE (m.ffoxscx) ALIAS FOXSCX
  3178.   ENDIF
  3179. ELSE
  3180.   SELECT SCXBASE
  3181.   m.i=AFIELDS(a_fscatter)
  3182.   IF .NOT._FOX25
  3183.     m.i=AFIELDS(a_fscatter)
  3184.     DIMENSION a_fscatter(m.i+1,4)
  3185.     a_fscatter(m.i+1,1)='PLATFORM'
  3186.     a_fscatter(m.i+1,2)='C'
  3187.     a_fscatter(m.i+1,3)=8
  3188.     a_fscatter(m.i+1,4)=0
  3189.     m.i=m.i+1
  3190.   ENDIF
  3191.   DIMENSION a_fscatter(m.i+8,4)
  3192.   a_fscatter(m.i+1,1)='OBJNAME_'
  3193.   a_fscatter(m.i+1,2)='C'
  3194.   a_fscatter(m.i+1,3)=24
  3195.   a_fscatter(m.i+1,4)=0
  3196.   a_fscatter(m.i+2,1)='OBJBASE_'
  3197.   a_fscatter(m.i+2,2)='C'
  3198.   a_fscatter(m.i+2,3)=35
  3199.   a_fscatter(m.i+2,4)=0
  3200.   a_fscatter(m.i+3,1)='OBJFIELD_'
  3201.   a_fscatter(m.i+3,2)='C'
  3202.   a_fscatter(m.i+3,3)=24
  3203.   a_fscatter(m.i+3,4)=0
  3204.   a_fscatter(m.i+4,1)='OBJLIB_'
  3205.   a_fscatter(m.i+4,2)='C'
  3206.   a_fscatter(m.i+4,3)=10
  3207.   a_fscatter(m.i+4,4)=0
  3208.   a_fscatter(m.i+5,1)='OBJSCX_'
  3209.   a_fscatter(m.i+5,2)='C'
  3210.   a_fscatter(m.i+5,3)=8
  3211.   a_fscatter(m.i+5,4)=0
  3212.   a_fscatter(m.i+6,1)='OBJFLAG_'
  3213.   a_fscatter(m.i+6,2)='L'
  3214.   a_fscatter(m.i+6,3)=1
  3215.   a_fscatter(m.i+6,4)=0
  3216.   a_fscatter(m.i+7,1)='OBJCMNT_'
  3217.   a_fscatter(m.i+7,2)='M'
  3218.   a_fscatter(m.i+7,3)=10
  3219.   a_fscatter(m.i+7,4)=0
  3220.   a_fscatter(m.i+8,1)='OBJMEMO_'
  3221.   a_fscatter(m.i+8,2)='M'
  3222.   a_fscatter(m.i+8,3)=10
  3223.   a_fscatter(m.i+8,4)=0
  3224.   CREATE DBF (m.ffoxscx) FROM ARRAY a_fscatter
  3225.   USE
  3226.   RELEASE a_fscatter
  3227.   SELECT 0
  3228.   USE (m.ffoxscx) ALIAS FOXSCX
  3229.   IF FILE(m.ffoxscx2+'.DBF')
  3230.     APPEND FROM (m.ffoxscx2)
  3231.     =erasedbf(m.ffoxscx2,m.ffoxscx2)
  3232.   ENDIF
  3233. ENDIF
  3234. SELECT FOXSCX
  3235. m.i=0
  3236. IF .NOT.TAG(1)=='OBJNAME_'.OR..NOT.KEY(1)=='UPPER(OBJNAME_)+OBJLIB_'
  3237.   m.i=1
  3238. ENDIF
  3239. IF .NOT.TAG(2)=='OBJBASE_'.OR..NOT.KEY(2)=='OBJBASE_+OBJLIB_'
  3240.   m.i=2
  3241. ENDIF
  3242. IF .NOT.TAG(3)=='OBJFIELD_'.OR..NOT.KEY(3)=='OBJFIELD_+OBJLIB_'
  3243.   m.i=3
  3244. ENDIF
  3245. IF .NOT.TAG(4)=='OBJLIB_'.OR..NOT.KEY(4)=='OBJLIB_+UPPER(OBJNAME_)'
  3246.   m.i=4
  3247. ENDIF
  3248. IF .NOT.TAG(5)=='OBJSCX_'.OR..NOT.KEY(5)=='OBJSCX_+OBJLIB_+UPPER(OBJNAME_)'
  3249.   m.i=5
  3250. ENDIF
  3251. IF m.i>0
  3252.   DELETE TAG ALL
  3253.   INDEX ON UPPER(OBJNAME_)+OBJLIB_ TAG OBJNAME_
  3254.   INDEX ON OBJBASE_+OBJLIB_ TAG OBJBASE_
  3255.   INDEX ON OBJFIELD_+OBJLIB_ TAG OBJFIELD_
  3256.   INDEX ON OBJLIB_+UPPER(OBJNAME_) TAG OBJLIB_
  3257.   INDEX ON OBJSCX_+OBJLIB_+UPPER(OBJNAME_) TAG OBJSCX_
  3258. ENDIF
  3259. IF EMPTY(FILTER()).AND.TYPE('PLATFORM')=='C'
  3260.   IF TYPE('m.platform_')#'C'.OR.EMPTY(m.platform_)
  3261.     SET FILTER TO PLATFORM==m.cplatform_
  3262.   ELSE
  3263.     SET FILTER TO PLATFORM==m.platform_
  3264.   ENDIF
  3265. ENDIF
  3266. LOCATE
  3267. RETURN .T.
  3268.  
  3269. * END openfoxscx
  3270.  
  3271.  
  3272.  
  3273. FUNCTION strtranc
  3274. PARAMETERS m.expc1,m.expc2,m.expc3,m.expn1,m.expn2
  3275. PRIVATE m.expc1,m.expc2,m.expc3,m.expn1,m.expn2
  3276. PRIVATE m.expr,m.at_pos,m.at_pos2,m.i,m.j
  3277.  
  3278. IF TYPE('m.expc1')#'C'
  3279.   RETURN ''
  3280. ENDIF
  3281. IF TYPE('m.expc2')#'C'.OR.TYPE('m.expc2')#'C'.OR.EMPTY(m.expc1).OR.;
  3282.    EMPTY(m.expc2)
  3283.   RETURN m.expc1
  3284. ENDIF
  3285. m.expr=m.expc1
  3286. IF TYPE('m.expn1')#'N'
  3287.   m.expn1=1
  3288. ENDIF
  3289. IF TYPE('m.expn2')#'N'
  3290.   m.expn2=LEN(m.expc1)
  3291. ENDIF
  3292. IF m.expn1<1.OR.m.expn2<1
  3293.   RETURN m.expc1
  3294. ENDIF
  3295. m.i=0
  3296. m.j=0
  3297. m.at_pos2=1
  3298. DO WHILE .T.
  3299.   m.at_pos=ATC(m.expc2,SUBSTR(m.expr,m.at_pos2))
  3300.   IF m.at_pos=0
  3301.     EXIT
  3302.   ENDIF
  3303.   m.i=m.i+1
  3304.   IF m.i<m.expn1
  3305.     m.at_pos2=m.at_pos+m.at_pos2+LEN(m.expc2)-1
  3306.     LOOP
  3307.   ENDIF
  3308.   m.expr=LEFT(m.expr,m.at_pos+m.at_pos2-2)+m.expc3+;
  3309.          SUBSTR(m.expr,m.at_pos+m.at_pos2+LEN(m.expc2)-1)
  3310.   m.j=m.j+1
  3311.   IF m.j>=m.expn2
  3312.     EXIT
  3313.   ENDIF
  3314.   m.at_pos2=m.at_pos+m.at_pos2+LEN(m.expc3)-1
  3315.   IF m.at_pos2>LEN(m.expr)
  3316.     EXIT
  3317.   ENDIF
  3318. ENDDO
  3319. RETURN m.expr
  3320.  
  3321. * END strtranc
  3322.  
  3323.  
  3324.  
  3325. FUNCTION linesearch
  3326. PARAMETERS m.find_str,m.searchstup
  3327. PRIVATE m.find_str,m.searchstup
  3328.  
  3329. RETURN wordsearch(m.find_str,m.searchstup,.T.)
  3330.  
  3331. * END linesearch
  3332.  
  3333.  
  3334.  
  3335. FUNCTION wordsearch
  3336. PARAMETERS m.find_str,m.searchstup,m.ignoreword
  3337. PRIVATE m.find_str,m.searchstup,m.memdata,m.mem_lines,m.memline,m.at_line,m.i,m.str_data
  3338.  
  3339. m.memdata=IIF(m.searchstup,SETUPCODE,COMMENT)
  3340. m.at_line=ATCLINE(m.find_str,m.memdata)
  3341. IF m.at_line=0
  3342.   RETURN m.null
  3343. ENDIF
  3344. m.mem_lines=MEMLINES(m.memdata)
  3345. FOR m.i = m.at_line TO m.mem_lines
  3346.   m.memline=ALLTRIM(MLINE(m.memdata,m.i))
  3347.   DO WHILE LEFT(m.memline,1)==CHR(9)
  3348.     m.memline=ALLTRIM(SUBSTR(m.memline,2))
  3349.   ENDDO
  3350.   IF ATC(m.find_str,m.memline)=1
  3351.     m.str_data=IIF(m.ignoreword,'',SUBSTR(m.memline,LEN(m.find_str)+1,1))
  3352.     IF EMPTY(m.str_data)
  3353.       RETURN ALLTRIM(SUBSTR(m.memline,ATC(m.find_str,m.memline)+;
  3354.              LEN(m.find_str)))
  3355.       EXIT
  3356.     ENDIF
  3357.   ENDIF
  3358. ENDFOR
  3359. RETURN m.null
  3360.  
  3361. * END wordsearch
  3362.  
  3363.  
  3364.  
  3365. FUNCTION erasedbf
  3366. PARAMETERS m.dbf_name,m.dbf_alias
  3367. PRIVATE m.dbf_name,m.dbf_alias,m.ferase
  3368.  
  3369. IF USED(m.dbf_alias)
  3370.   USE IN (m.dbf_alias)
  3371. ENDIF
  3372. m.dbf_name=trimext(m.dbf_name)
  3373. m.ferase=m.dbf_name+'.DBF'
  3374. IF FILE(m.ferase)
  3375.   ERASE (m.ferase)
  3376. ENDIF
  3377. m.ferase=m.dbf_name+'.FPT'
  3378. IF FILE(m.ferase)
  3379.   ERASE (m.ferase)
  3380. ENDIF
  3381. RETURN .T.
  3382.  
  3383. * END erasedbf
  3384.  
  3385.  
  3386.  
  3387. FUNCTION configfp
  3388. PARAMETERS m.find_opt,m.find_dflt
  3389. PRIVATE m.find_opt,m.find_dflt,m.cnfg_opt,m.config_str
  3390. PRIVATE m.memline,m.at_pos,m.at_pos2,m.i
  3391.  
  3392. IF TYPE('m.find_dflt')#'C'
  3393.   m.find_dflt=''
  3394. ENDIF
  3395. IF EMPTY(m.find_opt).OR.EMPTY(m.fconfigfp)
  3396.   RETURN UPPER(ALLTRIM(m.find_dflt))
  3397. ENDIF
  3398. m.config_str=CONFIGFP.FP
  3399. m.find_opt=UPPER(m.find_opt)
  3400. m.cnfg_opt=m.find_dflt
  3401. FOR m.i = 1 TO 255
  3402.   m.at_pos=ATC(m.find_opt,m.config_str,m.i)
  3403.   IF m.at_pos=0
  3404.     EXIT
  3405.   ENDIF
  3406.   IF m.at_pos>1
  3407.     m.memline=SUBSTR(m.config_str,m.at_pos-1,1)
  3408.     IF .NOT.INLIST(m.memline,m.lf,m.cr,' ',CHR(9))
  3409.       EXIT
  3410.     ENDIF
  3411.   ENDIF
  3412.   m.memline=STRTRAN(STRTRAN(STRTRAN(STRTRAN(STRTRAN(ALLTRIM(UPPER(;
  3413.             SUBSTR(m.config_str,m.at_pos))),CHR(34),''),CHR(39),''),;
  3414.             '[',''),']',''),' ','')
  3415.   DO WHILE LEFT(m.memline,1)==CHR(9)
  3416.     m.memline=ALLTRIM(SUBSTR(m.memline,2))
  3417.   ENDDO
  3418.   m.at_pos2=AT(m.cr,m.memline)
  3419.   IF m.at_pos2>0
  3420.     m.memline=LEFT(m.memline,m.at_pos2-1)
  3421.   ENDIF
  3422.   m.at_pos=AT('=',m.memline)
  3423.   IF m.at_pos=(LEN(m.find_opt)+1)
  3424.     m.cnfg_opt=SUBSTR(m.memline,m.at_pos+1)
  3425.     EXIT
  3426.   ENDIF
  3427. ENDFOR
  3428. RETURN UPPER(ALLTRIM(m.cnfg_opt))
  3429.  
  3430. * END configfp
  3431.  
  3432.  
  3433.  
  3434. FUNCTION trimext
  3435. PARAMETERS m.filename
  3436. PRIVATE m.filename,m.at_pos
  3437.  
  3438. m.at_pos=AT('.',m.filename)
  3439. IF m.at_pos>0
  3440.   m.filename=LEFT(m.filename,m.at_pos-1)
  3441. ENDIF
  3442. RETURN ALLTRIM(m.filename)
  3443.  
  3444. * END trimext
  3445.  
  3446.  
  3447.  
  3448. FUNCTION trimpath
  3449. PARAMETERS m.filename,m.trim_ext
  3450. PRIVATE m.filename,m.trim_ext,m.at_pos
  3451.  
  3452. m.at_pos=AT(':',m.filename)
  3453. IF m.at_pos>0
  3454.   m.filename=SUBSTR(m.filename,m.at_pos+1)
  3455. ENDIF
  3456. IF m.trim_ext
  3457.   m.filename=trimext(m.filename)
  3458. ENDIF
  3459. RETURN ALLTRIM(SUBSTR(m.filename,AT('\',m.filename,;
  3460.        MAX(OCCURS('\',m.filename),1))+1))
  3461.  
  3462. * END trimpath
  3463.  
  3464.  
  3465.  
  3466. FUNCTION uniquefile
  3467. PRIVATE m.filename
  3468.  
  3469. DO WHILE .T.
  3470.   m.filename='_'+ALLTRIM(SUBSTR(SYS(3),2,7))
  3471.   IF .NOT.FILE(m.filename+'.DBF')
  3472.     EXIT
  3473.   ENDIF
  3474. ENDDO
  3475. RETURN (m.filename)
  3476.  
  3477. * END uniquefile
  3478.  
  3479.  
  3480.  
  3481. FUNCTION add_fext
  3482. PARAMETERS m.filename
  3483. PRIVATE m.filename,m.i
  3484.  
  3485. IF EMPTY(m.filename).OR.'.'$m.filename
  3486.   m.filename=IIF(_WINDOWS,LOWER(m.filename),UPPER(m.filename))
  3487.   RETURN m.filename
  3488. ENDIF
  3489. FOR m.i = 1 TO ALEN(a_file_ext)
  3490.   IF FILE(m.filename+a_file_ext(m.i))
  3491.     m.filename=m.filename+a_file_ext(m.i)
  3492.     m.filename=IIF(_WINDOWS,LOWER(m.filename),UPPER(m.filename))
  3493.     RETURN m.filename
  3494.   ENDIF
  3495. ENDFOR
  3496. m.filename=m.filename+'.PRG'
  3497. m.filename=IIF(_WINDOWS,LOWER(m.filename),UPPER(m.filename))
  3498. RETURN m.filename
  3499.  
  3500. * END add_fext
  3501.  
  3502.  
  3503.  
  3504. PROCEDURE delaybar
  3505. PARAMETERS m.msg1,m.msg2,m.percent,m.flag
  3506. PRIVATE m.msg1,m.msg2,m.percent,m.flag,m.center_row,m.col
  3507. PRIVATE m.delay_cols,m.delay_bar
  3508.  
  3509. DO CASE
  3510.   CASE .NOT.m.flag
  3511.     IF _WINDOWS.OR._MAC
  3512.       DO updthrm WITH (m.msg1),(m.msg2),(m.percent)
  3513.       RETURN
  3514.     ENDIF
  3515.     IF .NOT.WEXIST('_wdelaybar')
  3516.       RETURN
  3517.     ENDIF
  3518.     ACTIVATE WINDOW _wdelaybar
  3519.     @ 0,3 SAY m.msg1
  3520.     @ 1,3 SAY m.msg2
  3521.     m.delay_cols=INT(MIN(m.percent,100)/2)
  3522.     IF m.percent>0
  3523.       m.delay_bar=REPLICATE('€',m.delay_cols)
  3524.       IF MOD(ROUND(MIN(m.percent,100)-.5,0),2)=1
  3525.         m.delay_bar=m.delay_bar+'›'
  3526.       ENDIF
  3527.       @ 3,3 SAY m.delay_bar
  3528.       IF LEN(m.delay_bar)<50
  3529.         ?? SPACE(50-LEN(m.delay_bar))
  3530.       ENDIF
  3531.     ENDIF
  3532.     RETURN
  3533.   CASE .NOT.EMPTY(m.msg1)
  3534.     IF _WINDOWS.OR._MAC
  3535.       DO actthrm WITH (m.msg1),(m.msg2)
  3536.       RETURN
  3537.     ENDIF
  3538.     m.center_row=INT(SROWS()/2)
  3539.     m.col=INT((SCOLS()-58)/2)
  3540.     DEFINE WINDOW _wdelaybar FROM m.center_row-3,m.col;
  3541.                              TO m.center_row+3,m.col+57;
  3542.                   DOUBLE COLOR SCHEME 5
  3543.     ACTIVATE WINDOW _wdelaybar
  3544.     @ 0,3 SAY m.msg1
  3545.     @ 1,3 SAY m.msg2
  3546.     @ 2,1 TO 4,54
  3547.     @ 3,3 SAY SPACE(50) COLOR SCHEME 5
  3548.     RETURN
  3549.   OTHERWISE
  3550.     IF _WINDOWS.OR._MAC
  3551.       DO deactthrmo
  3552.       RETURN
  3553.     ENDIF
  3554.     RELEASE WINDOW _wdelaybar
  3555.     RETURN
  3556. ENDCASE
  3557. RETURN
  3558.  
  3559. * END delaybar
  3560.  
  3561.  
  3562.  
  3563. PROCEDURE actthrm
  3564. PARAMETER m.text,m.prompt
  3565. PRIVATE m.text,m.prompt,m.rgb_color
  3566. PRIVATE clauses_
  3567.  
  3568. m.rgb_color='RGB(0, 0, 0, 192, 192, 192)'
  3569. clauses_="SIZE 5.615,63.833 FONT '"+m.c_dlgface+"',"+STR(m.c_dlgsize,10,5)+;
  3570.          " STYLE '"+m.c_dlgstyle+"'"
  3571. DEFINE WINDOW thrmomete;
  3572.       AT INT((SROW() - (( 5.615 *;
  3573.       FONTMETRIC(1, m.c_dlgface, m.c_dlgsize, m.c_dlgstyle )) /;
  3574.       FONTMETRIC(1, WFONT(1,""), WFONT( 2,""), WFONT(3,"")))) / 2),;
  3575.       INT((SCOL() - (( 63.833 *;
  3576.       FONTMETRIC(6, m.c_dlgface, m.c_dlgsize, m.c_dlgstyle )) /;
  3577.       FONTMETRIC(6, WFONT(1,""), WFONT( 2,""), WFONT(3,"")))) / 2);
  3578.       &clauses_;
  3579.       NOFLOAT;
  3580.       NOCLOSE;
  3581.       NONE;
  3582.       COLOR (m.rgb_color)
  3583. clauses_='CENTER'
  3584. MOVE WINDOW thrmomete &clauses_
  3585. ACTIVATE WINDOW thrmomete NOSHOW
  3586. clauses_="FONT '"+m.c_dlgface+"',"+STR(m.c_dlgsize,10,5)+;
  3587.          " STYLE '"+m.c_dlgstyle+"'"
  3588. @ 0.5,3 SAY m.text &clauses_
  3589. @ 1.5,3 SAY m.prompt &clauses_
  3590. m.rgb_color='RGB(255, 255, 255, 255, 255, 255)'
  3591. @ 0.000,0.000 TO 0.000,63.833;
  3592.                  COLOR (m.rgb_color)
  3593. m.rgb_color='RGB(255, 255, 255, 255, 255, 255)'
  3594. @ 0.000,0.000 TO 5.615,0.000;
  3595.                  COLOR (m.rgb_color)
  3596. m.rgb_color='RGB(128, 128, 128, 128, 128, 128)'
  3597. @ 0.385,0.667 TO 5.231,0.667;
  3598.                  COLOR (m.rgb_color)
  3599. m.rgb_color='RGB(128, 128, 128, 128, 128, 128)'
  3600. @ 0.308,0.667 TO 0.308,63.167;
  3601.                  COLOR (m.rgb_color)
  3602. m.rgb_color='RGB(255, 255, 255, 255, 255, 255)'
  3603. @ 0.385,63.000 TO 5.308,63.000;
  3604.                  COLOR (m.rgb_color)
  3605. m.rgb_color='RGB(255, 255, 255, 255, 255, 255)'
  3606. @ 5.231,0.667 TO 5.231,63.167;
  3607.                  COLOR (m.rgb_color)
  3608. m.rgb_color='RGB(128, 128, 128, 128, 128, 128)'
  3609. @ 5.538,0.000 TO 5.538,63.833;
  3610.                  COLOR (m.rgb_color)
  3611. m.rgb_color='RGB(128, 128, 128, 128, 128, 128)'
  3612. @ 0.000,63.667 TO 5.615,63.667;
  3613.                  COLOR (m.rgb_color)
  3614. m.rgb_color='RGB(128, 128, 128, 128, 128, 128)'
  3615. @ 3.000,3.333 TO 4.231,3.333;
  3616.                  COLOR (m.rgb_color)
  3617. m.rgb_color='RGB(255, 255, 255, 255, 255, 255)'
  3618. @ 3.000,60.333 TO 4.308,60.333;
  3619.                  COLOR (m.rgb_color)
  3620. m.rgb_color='RGB(128, 128, 128, 128, 128, 128)'
  3621. @ 3.000,3.333 TO 3.000,60.333;
  3622.                  COLOR (m.rgb_color)
  3623. m.rgb_color='RGB(255, 255, 255, 255, 255, 255)'
  3624. @ 4.231,3.333 TO 4.231,60.500;
  3625.                  COLOR (m.rgb_color)
  3626. SHOW WINDOW thrmomete TOP
  3627. RETURN
  3628.  
  3629. * END actthrm
  3630.  
  3631.  
  3632.  
  3633. PROCEDURE updthrm
  3634. PARAMETER m.text,m.prompt,m.percent
  3635. PRIVATE m.text,m.prompt,m.nblocks,m.percent,m.rgb_color
  3636. PRIVATE clauses_
  3637.  
  3638. ACTIVATE WINDOW thrmomete
  3639. clauses_="FONT '"+m.c_dlgface+"',"+STR(m.c_dlgsize,10,5)+;
  3640.          " STYLE '"+m.c_dlgstyle+"'"
  3641. IF .NOT.EMPTY(m.text)
  3642.   @ 0.5,3 SAY m.text &clauses_
  3643. ENDIF
  3644. IF .NOT.EMPTY(m.prompt)
  3645.   @ 1.5,3 SAY m.prompt &clauses_
  3646. ENDIF
  3647. m.percent=MIN(m.percent,100)
  3648. m.nblocks=(m.percent/100) * 56.269
  3649. clauses_='PATTERN 1'
  3650. m.rgb_color='RGB(128, 128, 128, 128, 128, 128)'
  3651. @ 3.000,3.333 TO 4.231,m.nblocks + 3.333 &clauses_;
  3652.                  COLOR (m.rgb_color)
  3653. IF m.percent<100
  3654.   @ 3.100,m.nblocks + 3.333 CLEAR TO 4.231,59.602
  3655. ENDIF
  3656. RETURN
  3657.  
  3658. * END updthrm
  3659.  
  3660.  
  3661.  
  3662. PROCEDURE deactthrmo
  3663.  
  3664. IF WEXIST("thrmomete")
  3665.   RELEASE WINDOW thrmomete
  3666. ENDIF
  3667. RETURN
  3668.  
  3669. * END deactthrmo
  3670.  
  3671.  
  3672.  
  3673. FUNCTION warning
  3674. PARAMETERS m.cmnd_str,m.operand
  3675. PRIVATE m.cmnd_str,m.operand
  3676.  
  3677. m.warnings=m.warnings+1
  3678. IF TYPE('m.cmnd_str')#'C'
  3679.   RETURN m.warnings
  3680. ENDIF
  3681. IF TYPE('m.operand')=='C'
  3682.   m.operand=STRTRAN(m.operand,' ','')
  3683.   IF LEFT(m.operand,1)=='.'
  3684.     m.operand=SUBSTR(m.operand,2)
  3685.   ENDIF
  3686.   m.cmnd_str=m.cmnd_str+" '"+m.operand+"' not found"
  3687. ENDIF
  3688. IF TYPE('m.fscxbase')=='C'.AND..NOT.EMPTY(m.fscxbase)
  3689.   m.cmnd_str=m.cmnd_str+'  ['+trimpath(m.fscxbase)+']'
  3690. ENDIF
  3691. WAIT CLEAR
  3692. IF TYPE('m.autohalt')=='C'.AND.m.autohalt=='OFF'
  3693.   WAIT LEFT(m.cmnd_str,254) WINDOW NOWAIT
  3694.   RETURN m.warnings
  3695. ENDIF
  3696. IF .NOT.EMPTY(_FOX25REV)
  3697.   m.cmnd_str='GENSCRNX Warning Mode - {C}ancel  {S}uspend  {I}gnore'+CHR(13)+;
  3698.              CHR(13)+m.cmnd_str
  3699. ENDIF
  3700. CLEAR TYPEAHEAD
  3701. WAIT LEFT(m.cmnd_str,254) WINDOW
  3702. DO CASE
  3703.   CASE MDOWN()
  3704.     =.F.
  3705.   CASE UPPER(CHR(LASTKEY()))=='I'
  3706.     RETURN m.warnings
  3707.   CASE UPPER(CHR(LASTKEY()))=='S'
  3708.     m.lasterror=ON('ERROR')
  3709.     ON ERROR
  3710.     WAIT CLEAR
  3711.     CLEAR TYPEAHEAD
  3712.     m.lastcursr=SET('CURSOR')
  3713.     ACTIVATE WINDOW Command
  3714.     SET ESCAPE ON
  3715.     SUSPEND
  3716.     SET ESCAPE OFF
  3717.     SET CURSOR &lastcursr
  3718.     ON ERROR &lasterror
  3719.     RETURN m.warnings
  3720. ENDCASE
  3721. DO cleanup
  3722. CANCEL
  3723.  
  3724. * END warning
  3725.  
  3726.  
  3727.  
  3728. PROCEDURE errorhnd
  3729. PARAMETER m.error_no,m.msg,m.prg_name,m.line_no,m.codeline
  3730. PRIVATE m.error_no,m.msg,m.prg_name,m.line_no,m.codeline,m.colright
  3731. PRIVATE m.row,m.col,m.lasterror,m.lastcursr,m.prompt
  3732.  
  3733. m.lasterror=ON('ERROR')
  3734. ON ERROR
  3735. SET ESCAPE OFF
  3736. WAIT CLEAR
  3737. CLEAR GETS
  3738. CLEAR TYPEAHEAD
  3739. m.lastcursr=SET('CURSOR')
  3740. SET CURSOR OFF
  3741. m.row=IIF(_DOS.OR._UNIX,INT((SROWS()-20)/2),0)
  3742. m.col=IIF(_DOS.OR._UNIX,INT((SCOLS()-69)/2),0)
  3743. DEFINE WINDOW win_prompt FROM m.row,m.col;
  3744.                          TO m.row+20,m.col+69;
  3745.               TITLE ' GENSCRNX Error Mode ';
  3746.               DOUBLE FLOAT SHADOW COLOR SCHEME 7
  3747. ACTIVATE WINDOW win_prompt
  3748. m.colright=WCOLS()-19
  3749. m.codeline=ALLTRIM(m.codeline)
  3750. m.colorschm=IIF(_WINDOWS.OR._MAC,2,1)
  3751. @ 1,1 EDIT m.codeline;
  3752.       SIZE 8,WCOLS()-2;
  3753.       NOMODIFY SCROLL;
  3754.       COLOR SCHEME (m.colorschm)
  3755. @ 9,1 TO 9,WCOLS()-2
  3756. @ 10,1 SAY 'Error message :  '
  3757. ?? PADR(ALLTRIM(m.msg),m.colright)
  3758. @ 11,1 SAY 'Error number  :  '
  3759. ?? LTRIM(STR(m.error_no))
  3760. @ 12,1 SAY 'Procedure name:  '
  3761. ?? PADR(ALLTRIM(m.prg_name),m.colright)
  3762. @ 13,1 SAY 'Line number   :  '
  3763. ?? IIF(m.line_no>0,LTRIM(STR(m.line_no)),'Unknown')
  3764. IF .NOT.EMPTY(ALIAS())
  3765.   @ 14,1 SAY 'Database name :  '
  3766.   ?? PADR(ALLTRIM(DBF()),m.colright)
  3767.   @ 15,1 SAY 'Alias name    :  '
  3768.   ?? ALIAS()
  3769.   @ 16,1 SAY 'Record number :  '
  3770.   ?? LTRIM(STR(RECNO()))
  3771. ENDIF
  3772. @ 17,1 TO 17,WCOLS()-2
  3773. @ 18,9 GET m.prompt ;
  3774.        PICTURE "@*HT \!\<Cancel;\<Suspend;\<Ignore" ;
  3775.        SIZE 1,11,8 ;
  3776.        DEFAULT 1
  3777. SET CURSOR ON
  3778. READ CYCLE MODAL OBJECT 2
  3779. DO CASE
  3780.   CASE m.prompt=2
  3781.     @ 18,0 CLEAR
  3782.     ACTIVATE SCREEN
  3783.     ACTIVATE WINDOW Command
  3784.     SET ESCAPE ON
  3785.     SUSPEND
  3786.     SET ESCAPE OFF
  3787.     RELEASE WINDOW win_prompt
  3788.     SET CURSOR &lastcursr
  3789.     ON ERROR &lasterror
  3790.     RETURN
  3791.   CASE m.prompt=3
  3792.     RELEASE WINDOW win_prompt
  3793.     SET CURSOR &lastcursr
  3794.     ON ERROR &lasterror
  3795.     RETURN
  3796. ENDCASE
  3797. RELEASE WINDOW win_prompt
  3798. m.gen_mode=.F.
  3799. DO cleanup
  3800. CANCEL
  3801.  
  3802. * END errorhnd
  3803.  
  3804.  
  3805.  
  3806. PROCEDURE esc_check
  3807. PRIVATE m.i
  3808.  
  3809. IF CHRSAW()
  3810.   m.i=INKEY('H')
  3811.   IF m.i=27
  3812.     DO cleanup
  3813.     CANCEL
  3814.   ENDIF
  3815. ENDIF
  3816. RETURN
  3817.  
  3818. * END esc_check
  3819.  
  3820.  
  3821.  
  3822. PROCEDURE cleanup
  3823. PARAMETERS m.sprcheck
  3824. PRIVATE m.sprcheck,m.memline,m.find_str,m.at_pos,m.i,m.j,m.len_adj
  3825. PRIVATE m.range1,m.range2,m.wchilds,m.winontop1,m.winontop2
  3826.  
  3827. RELEASE WINDOWS _wdelaybar,thrmomete
  3828. IF USED('_TEMPFILE')
  3829.   USE IN _TEMPFILE
  3830. ENDIF
  3831. IF USED('CONFIGFP')
  3832.   USE IN CONFIGFP
  3833. ENDIF
  3834. IF USED('FOXSCX')
  3835.   USE IN FOXSCX
  3836. ENDIF
  3837. IF USED('SCXINSERT')
  3838.   USE IN SCXINSERT
  3839. ENDIF
  3840. IF USED('SCXBASE')
  3841.   USE IN SCXBASE
  3842. ENDIF
  3843. IF USED('SCXDATA')
  3844.   USE IN SCXDATA
  3845. ENDIF
  3846. IF USED('PJXBASE')
  3847.   USE IN PJXBASE
  3848. ENDIF
  3849. IF USED('PJXDATA')
  3850.   USE IN PJXDATA
  3851. ENDIF
  3852. IF USED('INSERTFILE')
  3853.   USE IN INSERTFILE
  3854. ENDIF
  3855. IF TYPE('m.fscxdata')#'C'
  3856.   IF USED('SPRDATA')
  3857.     USE IN SPRDATA
  3858.   ENDIF
  3859.   ON ERROR
  3860.   ACTIVATE SCREEN
  3861.   IF _WINDOWS
  3862.     SET MESSAGE TO
  3863.   ENDIF
  3864.   SET COMPATIBLE OFF
  3865.   SET EXACT OFF
  3866.   SET SAFETY OFF
  3867.   SET EXCLUSIVE ON
  3868.   SET UDFPARMS TO VALUE
  3869.   SET CURSOR ON
  3870.   SET MEMOWIDTH TO 50
  3871.   SET ESCAPE ON
  3872.   WAIT CLEAR
  3873.   CLEAR TYPEAHEAD
  3874.   CANCEL
  3875. ENDIF
  3876. =erasedbf(m.projdbf,'PJXDATA')
  3877. IF TYPE('m.scxcount')=='N'.AND.m.scxcount>0
  3878.   FOR m.i = 1 TO m.scxcount
  3879.     IF TYPE('a_fscxdata(m.i)')=='C'
  3880.       m.fscxdata=a_fscxdata(m.i)
  3881.     ENDIF
  3882.     =erasedbf(m.fscxdata,'SCXDATA')
  3883.   ENDFOR
  3884. ENDIF
  3885. m.range1=0
  3886. m.range2=0
  3887. IF gen_mode.AND.m.sprcheck.AND..NOT.m.fromproj.AND.;
  3888.    m.compspr=='ON'.AND.FILE(m.fsprout)
  3889.   SET MEMOWIDTH TO 254
  3890.   IF _WINDOWS
  3891.     SET MESSAGE TO PADR('Compiling Screen Code: '+LOWER(m.fsprout),79)
  3892.   ENDIF
  3893.   COMPILE (m.fsprout)
  3894.   IF _WINDOWS
  3895.     SET MESSAGE TO
  3896.   ENDIF
  3897.   IF m.dispspr=='ON'.AND.FILE(m.fsprerr)
  3898.     m.find_str=''
  3899.     m.range1=1
  3900.     m.range2=1
  3901.     IF .NOT.USED('SPRDATA')
  3902.       CREATE CURSOR SPRDATA (SPR M, INS M)
  3903.       INSERT BLANK
  3904.       APPEND MEMO SPR FROM (m.fsprout) OVERWRITE
  3905.     ENDIF
  3906.     SELECT SPRDATA
  3907.     m.len_adj=LEN(SPR)
  3908.     REPLACE SPR WITH STRTRAN(SPR,m.lf+';',';')+m.cr_lf
  3909.     m.len_adj=m.len_adj-LEN(SPR)+2
  3910.     APPEND MEMO INS FROM (m.fsprerr) OVERWRITE
  3911.     m.at_pos=ATC(m.m_errline,INS)
  3912.     IF m.at_pos>0
  3913.       m.i=VAL(SUBSTR(INS,m.at_pos+LEN(m.m_errline)))
  3914.       m.find_str=MLINE(SPR,m.i)
  3915.       IF .NOT.m.find_str$MLINE(INS,1)
  3916.         m.find_str=MLINE(INS,1)
  3917.       ENDIF
  3918.       FOR m.j = (m.i-1) TO 1 STEP -1
  3919.         m.memline=MLINE(SPR,m.j)
  3920.         IF .NOT.RIGHT(m.memline,1)==';'
  3921.           EXIT
  3922.         ENDIF
  3923.         m.find_str=m.memline+m.cr_lf+m.find_str
  3924.       ENDFOR
  3925.       FOR m.j = m.i TO (MEMLINES(SPR)-1)
  3926.         m.memline=MLINE(SPR,m.j)
  3927.         IF .NOT.RIGHT(m.memline,1)==';'
  3928.           EXIT
  3929.         ENDIF
  3930.         m.find_str=m.find_str+m.cr_lf+m.memline
  3931.       ENDFOR
  3932.       IF .NOT.EMPTY(m.find_str)
  3933.         m.at_pos=AT(m.lf+m.find_str+m.cr,SPR)
  3934.         IF m.at_pos=0
  3935.           m.at_pos=AT(m.cr+m.find_str+m.cr,SPR)
  3936.         ENDIF
  3937.         IF m.at_pos>0
  3938.           m.range1=m.at_pos+1
  3939.           m.range2=m.at_pos+LEN(m.find_str)+m.len_adj+1
  3940.         ENDIF
  3941.       ENDIF
  3942.     ENDIF
  3943.     m.i=SROWS()-25-IIF(_WINDOWS.AND.SET('STATUS BAR')=='ON',1,0)
  3944.     DEFINE WINDOW _weditfile FROM 17+m.i,0 TO 24+m.i,SCOLS()-1;
  3945.                   SYSTEM CLOSE FLOAT GROW MINIMIZE SHADOW ZOOM;
  3946.                   COLOR SCHEME 8
  3947.     MODIFY FILE (m.fsprerr) NOWAIT;
  3948.                 RANGE 1,1 WINDOW _weditfile
  3949.     ZOOM WINDOW _weditfile NORM FROM 1+m.i,0 TO 15+m.i,SCOLS()-1
  3950.     MODIFY FILE (m.fsprout) NOWAIT;
  3951.                 RANGE m.range1,m.range2 WINDOW _weditfile
  3952.     RELEASE WINDOW _weditfile
  3953.   ENDIF
  3954. ENDIF
  3955. IF USED('SPRDATA')
  3956.   USE IN SPRDATA
  3957. ENDIF
  3958. WAIT CLEAR
  3959. IF m.warnings>0
  3960.   WAIT ALLTRIM(STR(m.warnings,8))+' warning'+IIF(m.warnings>1,'s','');
  3961.        WINDOW NOWAIT
  3962. ENDIF
  3963. DO restoreset
  3964. CLEAR TYPEAHEAD
  3965. IF .NOT.gen_mode.OR.m.fromproj
  3966.   RETURN
  3967. ENDIF
  3968. m.wchilds=WCHILD()-IIF(m.range1=0,0,2)
  3969. IF m.wchilds<=1
  3970.   IF m.range1=0.AND.m.autorun=='ON'.AND.FILE(m.fsprout)
  3971.     KEYBOARD '{Ctrl+W}{Ctrl+F2}DO '+m.fsprout+CHR(13)
  3972.   ENDIF
  3973.   RETURN
  3974. ENDIF
  3975. m.winontop1=''
  3976. FOR m.i = 1 TO m.wchilds
  3977.   m.winontop2=m.winontop1
  3978.   m.winontop1=WCHILD(m.i-1)
  3979. ENDFOR
  3980. IF ATC('.PRO',m.winontop2)=0.OR.;
  3981.    .NOT.UPPER(trimext(m.winontop1))==UPPER(trimext(m.winontop2))
  3982.   IF m.range1=0.AND.m.autorun=='ON'.AND.FILE(m.fsprout)
  3983.     KEYBOARD '{Ctrl+W}{Ctrl+F2}DO '+m.fsprout+CHR(13)
  3984.   ENDIF
  3985.   RETURN
  3986. ENDIF
  3987. IF m.range1=0
  3988.   KEYBOARD '{Ctrl+W}' PLAIN
  3989.   IF m.autorun=='ON'.AND.FILE(m.fsprout)
  3990.     KEYBOARD '{Ctrl+W}{Ctrl+F2}DO '+m.fsprout+CHR(13)
  3991.   ENDIF
  3992. ELSE
  3993.   KEYBOARD '{Ctrl+F1}{Ctrl+F1}{Ctrl+W}' PLAIN
  3994.   FOR m.i = 1 TO m.wchilds-1
  3995.     KEYBOARD '{Ctrl+F1}' PLAIN
  3996.   ENDFOR
  3997. ENDIF
  3998. RETURN
  3999.  
  4000. * END cleanup
  4001.  
  4002.  
  4003.  
  4004. PROCEDURE restoreset
  4005.  
  4006. m.drv_no=0
  4007. IF TYPE('m.lastselect')=='N'
  4008.   SELECT (m.lastselect)
  4009. ENDIF
  4010. SET MEMOWIDTH TO (m.lastmemow)
  4011. ACTIVATE SCREEN
  4012. @ 0,0 SAY ''
  4013. IF m.lastsetudfp=='VALUE'
  4014.   SET UDFPARMS TO VALUE
  4015. ELSE
  4016.   SET UDFPARMS TO REFERENCE
  4017. ENDIF
  4018. IF m.lastsetexac=='ON'
  4019.   SET EXACT ON
  4020. ELSE
  4021.   SET EXACT OFF
  4022. ENDIF
  4023. IF m.lastsetexcl=='ON'
  4024.   SET EXCLUSIVE ON
  4025. ELSE
  4026.   SET EXCLUSIVE OFF
  4027. ENDIF
  4028. IF EMPTY(m.lastsetpath)
  4029.   SET PATH TO
  4030. ELSE
  4031.   SET PATH TO (m.lastsetpath)
  4032. ENDIF
  4033. IF m.lastsetsfty=='ON'
  4034.   SET SAFETY ON
  4035. ELSE
  4036.   SET SAFETY OFF
  4037. ENDIF
  4038. IF m.lastsetcomp=='ON'
  4039.   SET COMPATIBLE ON
  4040. ELSE
  4041.   SET COMPATIBLE OFF
  4042. ENDIF
  4043. ON ERROR
  4044. IF _WINDOWS
  4045.   SET MESSAGE TO
  4046. ENDIF
  4047. SET CURSOR ON
  4048. SET ESCAPE ON
  4049. RETURN
  4050.  
  4051. * END restoreset
  4052.  
  4053.  
  4054.  
  4055. PROCEDURE restoreenv
  4056.  
  4057. SET COMPATIBLE OFF
  4058. SET EXACT OFF
  4059. SET PATH TO (m.newsetpath)
  4060. SET SAFETY OFF
  4061. SET EXCLUSIVE ON
  4062. SET UDFPARMS TO VALUE
  4063. SET CURSOR OFF
  4064. SET MEMOWIDTH TO 254
  4065. RETURN
  4066.  
  4067. * END restoreenv
  4068.  
  4069.  
  4070.  
  4071. FUNCTION evltxt
  4072. PARAMETERS m.old_text
  4073. PRIVATE m.old_text,m.new_text,m.eval_str,m.eval_str1,m.eval_str2,m.var_type
  4074. PRIVATE m.at_pos,m.at_pos2,m.at_pos3,m.at_pos4,m.at_pos5,m.old_str,m.new_str
  4075. PRIVATE m.i,m.j,m.at_line,m.onerror,m.cr_lf,m.evlmode,m.mthd_str,m.sellast
  4076.  
  4077. IF TYPE('m.old_text')#'C'
  4078.   RETURN m.old_text
  4079. ENDIF
  4080. m.cr_lf=CHR(10)+CHR(13)
  4081. m.onerror=ON('ERROR')
  4082. m.new_text=m.old_text
  4083. m.at_pos3=1
  4084. DO WHILE .T.
  4085.   m.at_pos=AT('{{',SUBSTR(m.old_text,m.at_pos3))
  4086.   IF m.at_pos=0
  4087.     EXIT
  4088.   ENDIF
  4089.   m.at_pos2=AT('}}',SUBSTR(m.old_text,m.at_pos+m.at_pos3-1))
  4090.   IF m.at_pos2=0
  4091.     EXIT
  4092.   ENDIF
  4093.   m.at_pos4=AT('{{',SUBSTR(m.old_text,m.at_pos+m.at_pos3+1))
  4094.   IF m.at_pos4>0.AND.m.at_pos4<m.at_pos2
  4095.     m.at_pos4=OCCURS('{{',SUBSTR(m.old_text,m.at_pos+m.at_pos3-1,;
  4096.               m.at_pos2-m.at_pos4))
  4097.     m.at_pos4=AT('{{',SUBSTR(m.old_text,m.at_pos+m.at_pos3-1),m.at_pos4)
  4098.     m.old_str=SUBSTR(m.old_text,m.at_pos+m.at_pos3-1,m.at_pos2+1)
  4099.     m.eval_str=SUBSTR(m.old_str,3,LEN(m.old_str)-2)
  4100.     m.old_str=evltxt(m.eval_str)
  4101.     m.old_text=STRTRAN(m.old_text,m.eval_str,m.old_str)
  4102.     m.new_text=STRTRAN(m.new_text,m.eval_str,m.old_str)
  4103.     LOOP
  4104.   ENDIF
  4105.   m.old_str=SUBSTR(m.old_text,m.at_pos+m.at_pos3-1,m.at_pos2+1)
  4106.   m.eval_str=ALLTRIM(SUBSTR(m.old_str,3,LEN(m.old_str)-4))
  4107.   DO esc_check
  4108.   m.evlmode=.F.
  4109.   ON ERROR DO errorhnd WITH ERROR(),MESSAGE(),PROGRAM(),LINENO(),;
  4110.                             m.old_str+m.cr_lf+'ƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒ'+;
  4111.                             'ƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒ'+;
  4112.                             m.cr_lf+MESSAGE(1)
  4113.   DO CASE
  4114.     CASE EMPTY(m.eval_str)
  4115.       m.eval_str=''
  4116.     CASE LEFT(m.eval_str,2)=='&.'
  4117.       m.eval_str=SUBSTR(m.eval_str,3)
  4118.       &eval_str &&;
  4119.       ƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒ;
  4120.       Error occured during macro substitution of {{&. <expC> }}.
  4121.       m.eval_str=''
  4122.     CASE LEFT(m.eval_str,1)=='<'
  4123.       m.eval_str=insert(SUBSTR(m.eval_str,2)) &&;
  4124.       ƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒ;
  4125.       Error occured during evaluation of {{< <file> }}.
  4126.     CASE '::'$m.eval_str
  4127.       m.eval_str1=''
  4128.       m.eval_str2=''
  4129.       m.at_pos4=AT('||',m.eval_str)
  4130.       IF m.at_pos4>0
  4131.         m.eval_str2=IIF(m.at_pos4>0,SUBSTR(m.eval_str,m.at_pos4+2),'')
  4132.         m.eval_str=LEFT(m.eval_str,m.at_pos4-1)
  4133.       ENDIF
  4134.       FOR m.i = 1 TO 2
  4135.         m.at_pos4=AT('::',m.eval_str)
  4136.         m.evlmode=.T.
  4137.         m.eval_str=objdata(LEFT(m.eval_str,m.at_pos4-1),;
  4138.                    SUBSTR(m.eval_str,m.at_pos4+2)) &&;
  4139.         ƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒ;
  4140.         Error occured during evaluation of {{ <expC1> :: <expC2> }}.
  4141.         IF m.i=1.AND..NOT.EMPTY(m.eval_str2)
  4142.           m.eval_str1=m.eval_str
  4143.           m.eval_str=m.eval_str2
  4144.           LOOP
  4145.         ENDIF
  4146.         m.evlmode=.F.
  4147.         IF m.i=2
  4148.           m.eval_str2=m.eval_str
  4149.           IF EMPTY(m.eval_str2)
  4150.             m.eval_str=m.eval_str1
  4151.             EXIT
  4152.           ENDIF
  4153.           IF EMPTY(m.eval_str1)
  4154.             m.eval_str=m.eval_str2
  4155.             EXIT
  4156.           ENDIF
  4157.           m.sellast=SELECT()
  4158.           IF .NOT.USED('_TEMPFILE')
  4159.             CREATE CURSOR _TEMPFILE (COMMENT M, SETUPCODE M)
  4160.             INSERT BLANK
  4161.           ENDIF
  4162.           SELECT _TEMPFILE
  4163.           LOCATE
  4164.           REPLACE COMMENT WITH m.eval_str2
  4165.           REPLACE SETUPCODE WITH m.eval_str1
  4166.           m.eval_str1=''
  4167.           m.eval_str2=''
  4168.           DO WHILE .T.
  4169.             =esc_check()
  4170.             m.mthd_str=wordsearch(m.c_method)
  4171.             IF m.mthd_str==m.null
  4172.               m.eval_str=COMMENT+m.cr_lf+SETUPCODE
  4173.               EXIT
  4174.             ENDIF
  4175.             IF EMPTY(m.mthd_str)
  4176.               REPLACE COMMENT WITH strtranc(m.c_method,m.m_method,1,1)
  4177.               LOOP
  4178.             ENDIF
  4179.             m.at_pos4=ATC(m.c_method+' '+m.mthd_str+m.cr,COMMENT+m.cr)
  4180.             IF m.at_pos4=0
  4181.               REPLACE COMMENT WITH strtranc(m.c_method,m.m_method,1,1)
  4182.               LOOP
  4183.             ENDIF
  4184.             m.at_pos5=ATC(m.c_endmthd,SUBSTR(COMMENT,m.at_pos4))
  4185.             IF m.at_pos5>0
  4186.               m.at_pos5=m.at_pos5+LEN(m.c_endmthd)
  4187.             ELSE
  4188.               m.at_pos5=LEN(COMMENT)+1
  4189.             ENDIF
  4190.             m.eval_str1=SUBSTR(COMMENT,m.at_pos4,m.at_pos5)+m.cr_lf
  4191.             REPLACE COMMENT WITH LEFT(COMMENT,m.at_pos4-1)+;
  4192.                                  SUBSTR(COMMENT,m.at_pos4+m.at_pos5)
  4193.             m.at_pos4=ATC(m.c_method+' '+m.mthd_str+m.cr,SETUPCODE+m.cr)
  4194.             IF m.at_pos4=0
  4195.               LOOP
  4196.             ENDIF
  4197.             m.at_pos5=ATC(m.c_endmthd,SUBSTR(SETUPCODE,m.at_pos4))
  4198.             IF m.at_pos5>0
  4199.               m.at_pos5=m.at_pos5+LEN(m.c_endmthd)
  4200.             ELSE
  4201.               m.at_pos5=LEN(SETUPCODE)+1
  4202.             ENDIF
  4203.             REPLACE SETUPCODE WITH LEFT(SETUPCODE,m.at_pos4-1)+m.eval_str1+;
  4204.                                    SUBSTR(SETUPCODE,m.at_pos4+m.at_pos5)
  4205.           ENDDO
  4206.           m.eval_str=SETUPCODE
  4207.           SELECT (m.sellast)
  4208.         ENDIF
  4209.         EXIT
  4210.       ENDFOR
  4211.       m.eval_str1=''
  4212.       m.eval_str2=''
  4213.     OTHERWISE
  4214.       m.eval_str=EVALUATE(m.eval_str) &&;
  4215.       ƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒ;
  4216.       Error occured during evaluation of {{ <expC> }}.
  4217.   ENDCASE
  4218.   IF EMPTY(m.onerror)
  4219.     ON ERROR
  4220.   ELSE
  4221.     ON ERROR &onerror
  4222.   ENDIF
  4223.   m.var_type=TYPE('m.eval_str')
  4224.   DO CASE
  4225.     CASE m.var_type=='C'
  4226.       m.new_str=m.eval_str
  4227.     CASE m.var_type=='N'
  4228.       m.new_str=ALLTRIM(STR(m.eval_str,24,12))
  4229.       DO WHILE RIGHT(m.new_str,1)=='0'
  4230.         m.new_str=LEFT(m.new_str,LEN(m.new_str)-1)
  4231.         IF RIGHT(m.new_str,1)=='.'
  4232.           m.new_str=LEFT(m.new_str,LEN(m.new_str)-1)
  4233.           EXIT
  4234.         ENDIF
  4235.       ENDDO
  4236.     CASE m.var_type=='D'
  4237.       m.new_str=DTOC(m.eval_str)
  4238.     CASE m.var_type=='L'
  4239.       m.new_str=IIF(m.eval_str,'.T.','.F.')
  4240.     OTHERWISE
  4241.       m.new_str=m.old_str
  4242.   ENDCASE
  4243.   m.new_text=STRTRAN(m.new_text,m.old_str,m.new_str)
  4244.   m.at_pos2=m.at_pos+LEN(m.new_str)
  4245.   IF m.at_pos2<=0
  4246.     EXIT
  4247.   ENDIF
  4248.   m.at_pos3=m.at_pos3+m.at_pos2
  4249. ENDDO
  4250. m.j=0
  4251. DO WHILE '{{'$m.new_text
  4252.   =esc_check()
  4253.   m.i=LEN(m.new_text)
  4254.   m.new_text=evltxt(m.new_text)
  4255.   IF m.i=LEN(m.new_text)
  4256.     IF m.j>=2
  4257.       EXIT
  4258.     ENDIF
  4259.     m.j=m.j+1
  4260.   ENDIF
  4261. ENDDO
  4262. RETURN m.new_text
  4263.  
  4264. * END evltxt
  4265.  
  4266.  
  4267.  
  4268. FUNCTION evlrec
  4269. PRIVATE m.evlflag,m.evlloop,m.i,m.field_name,m.field_type,m.field_eval
  4270.  
  4271. m.evlflag=.F.
  4272. m.evlloop=.T.
  4273. DO WHILE m.evlloop
  4274.   m.evlloop=.F.
  4275.   FOR m.i = 1 TO FCOUNT()
  4276.     m.field_name=FIELD(m.i)
  4277.     m.field_type=TYPE(m.field_name)
  4278.     IF m.field_type#'M'
  4279.       LOOP
  4280.     ENDIF
  4281.     m.field_eval=EVALUATE(m.field_name)
  4282.     IF '{{'$m.field_eval
  4283.       REPLACE (m.field_name) WITH evltxt(m.field_eval)
  4284.       m.evlflag=.T.
  4285.       m.evlloop=.T.
  4286.     ENDIF
  4287.   ENDFOR
  4288.   EXIT
  4289. ENDDO
  4290. RETURN m.evlflag
  4291.  
  4292. * END evlrec
  4293.  
  4294.  
  4295.  
  4296. FUNCTION insblank
  4297. PARAMETERS m.skiprec
  4298. PRIVATE m.skiprec,m.lastfilter,m.r
  4299.  
  4300. IF RECNO()<m.r_scxdata
  4301.   RETURN .F.
  4302. ENDIF
  4303. m.lastfilter=FILTER()
  4304. SET FILTER TO
  4305. IF TYPE('m.skiprec')#'N'
  4306.   m.skiprec=0
  4307. ENDIF
  4308. SKIP m.skiprec
  4309. IF m.skiprec>0.OR.BOF()
  4310.   SKIP -1
  4311. ENDIF
  4312. INSERT BLANK
  4313. m.r=RECNO()
  4314. SCAN REST
  4315.   IF VPOS<0
  4316.     REPLACE HPOS WITH HPOS+1
  4317.   ENDIF
  4318.   IF HEIGHT<0
  4319.     REPLACE WIDTH WITH WIDTH+1
  4320.   ENDIF
  4321. ENDSCAN
  4322. GOTO m.r
  4323. IF EMPTY(m.lastfilter)
  4324.   SET FILTER TO
  4325. ELSE
  4326.   SET FILTER TO &lastfilter
  4327. ENDIF
  4328. RETURN .T.
  4329.  
  4330. * END insblank
  4331.  
  4332.  
  4333.  
  4334. FUNCTION insrec
  4335. PARAMETERS m.skiprec
  4336. PRIVATE m.skiprec
  4337.  
  4338. IF TYPE('SETUPCODE')#'M'.OR.RECNO()<m.r_scxdata
  4339.   RETURN .F.
  4340. ENDIF
  4341. IF TYPE('m.skiprec')#'N'
  4342.   m.skiprec=0
  4343. ENDIF
  4344. IF .NOT.insblank(m.skiprec)
  4345.   RETURN .F.
  4346. ENDIF
  4347. REPLACE OBJTYPE WITH 15, OBJCODE WITH 0
  4348. IF TYPE('PLATFORM')=='C'
  4349.   REPLACE PLATFORM WITH m.platform_
  4350. ENDIF
  4351. REPLACE OBJTYPE WITH 15, OBJCODE WITH 0, EXPR WITH '',;
  4352.         VPOS WITH -0, HPOS WITH 0,;
  4353.         HEIGHT WITH 1, WIDTH WITH 1, PICTURE WITH '',;
  4354.         BOXCHAR WITH '', FILLCHAR WITH '', SCHEME WITH 0,;
  4355.         SCHEME2 WITH -1, COLORPAIR WITH ''
  4356. IF TYPE('PLATFORM')=='C'
  4357.   REPLACE PENRED WITH -1, PENGREEN WITH -1, PENBLUE WITH -1,;
  4358.           FILLRED WITH -1, FILLGREEN WITH -1, FILLBLUE WITH -1,;
  4359.           PENSIZE WITH -1, PENPAT WITH -1, FONTFACE WITH '',;
  4360.           FONTSTYLE WITH 0, FONTSIZE WITH 0
  4361. ENDIF
  4362. RETURN .T.
  4363.  
  4364. * END insrec
  4365.  
  4366.  
  4367.  
  4368. FUNCTION duprec
  4369. PARAMETERS m.skiprec
  4370. PRIVATE m.skiprec
  4371.  
  4372. IF TYPE('SETUPCODE')#'M'.OR.RECNO()<m.r_scxdata
  4373.   RETURN .F.
  4374. ENDIF
  4375. IF TYPE('m.skiprec')#'N'
  4376.   m.skiprec=0
  4377. ENDIF
  4378. RELEASE a_fscatter
  4379. SCATTER TO a_fscatter MEMO
  4380. IF .NOT.insblank(m.skiprec)
  4381.   RELEASE a_fscatter
  4382.   RETURN .F.
  4383. ENDIF
  4384. GATHER FROM a_fscatter MEMO
  4385. RELEASE a_fscatter
  4386. RETURN .T.
  4387.  
  4388. * END duprec
  4389.  
  4390.  
  4391.  
  4392. FUNCTION insobj
  4393. PARAMETERS m.match_str,m.deldirect
  4394. PRIVATE m.match_str,m.deldirect,m.objlib,m.objname,m.row,m.col,m.rows,m.cols
  4395. PRIVATE m.row_offset,m.col_offset,m.lastexac,m.i,m.j,m.old_text,m.new_text
  4396. PRIVATE m.memline,m.at_pos,m.at_line,m.trntxt_str
  4397.  
  4398. IF m.deldirect
  4399.   DELETE
  4400. ELSE
  4401.   =delobj1()
  4402. ENDIF
  4403. m.objlib=''
  4404. m.objname=PADR(ALLTRIM(m.match_str),LEN(FOXSCX.OBJLIB_)+LEN(FOXSCX.OBJNAME_))
  4405. m.at_pos=AT('.',m.objname)
  4406. IF m.at_pos>0
  4407.   m.objlib=PADR(UPPER(CHRTRAN(ALLTRIM(LEFT(m.objname,m.at_pos-1)),;
  4408.            m.badchars,m.stdascii)),LEN(FOXSCX.OBJLIB_))
  4409.   m.objname=ALLTRIM(SUBSTR(m.objname,m.at_pos+1))
  4410. ENDIF
  4411. m.objlib=PADR(ALLTRIM(m.objlib),LEN(FOXSCX.OBJLIB_))
  4412. m.objname=PADR(ALLTRIM(m.objname),LEN(FOXSCX.OBJNAME_))
  4413. IF TYPE('m.inclibs')#'N'
  4414.   m.inclibs=0
  4415. ENDIF
  4416. IF m.inclibs=0.AND.EMPTY(m.objlib)
  4417.   =warning(m.c_insobj,m.match_str)
  4418.   RETURN .F.
  4419. ENDIF
  4420. m.objname=PADR(CHRTRAN(m.objname,m.badchars,m.stdascii),;
  4421.            LEN(FOXSCX.OBJNAME_))
  4422. m.row=VPOS
  4423. m.col=HPOS
  4424. m.rows=HEIGHT
  4425. m.cols=WIDTH
  4426. m.trntxt_str=''
  4427. m.at_line=ATCLINE(m.c_trntxt,COMMENT)
  4428. IF m.at_line>0
  4429.   FOR m.i = m.at_line TO MEMLINES(COMMENT)
  4430.     m.memline=ALLTRIM(MLINE(COMMENT,m.i))
  4431.     IF m.i>m.at_line.AND..NOT.'*:'$m.memline
  4432.       m.at_pos=AT(m.cr,COMMENT,m.i)+1
  4433.       IF m.at_pos=1.OR.ATC(m.c_trntxt,SUBSTR(COMMENT,m.at_pos))=0
  4434.         EXIT
  4435.       ENDIF
  4436.       LOOP
  4437.     ENDIF
  4438.     m.at_pos=ATC(m.c_trntxt,m.memline)
  4439.     IF m.at_pos=1
  4440.       m.trntxt_str=m.trntxt_str+m.memline+m.cr_lf
  4441.     ENDIF
  4442.   ENDFOR
  4443. ENDIF
  4444. SELECT FOXSCX
  4445. m.lstorder=ORDER()
  4446. SET ORDER TO OBJNAME_
  4447. IF EMPTY(m.objlib)
  4448.   m.lstexac=SET('EXACT')
  4449.   SET EXACT ON
  4450.   FOR m.i = 1 TO m.inclibs
  4451.     SEEK UPPER(PADR(m.objname,LEN(OBJNAME_))+PADR(a_inclib(m.i),LEN(OBJLIB_)))
  4452.     IF .NOT.EOF()
  4453.       m.objlib=OBJLIB_
  4454.       EXIT
  4455.     ENDIF
  4456.   ENDFOR
  4457.   IF m.lstexac=='ON'
  4458.     SET EXACT ON
  4459.   ELSE
  4460.     SET EXACT OFF
  4461.   ENDIF
  4462. ENDIF
  4463. m.lastorder=ORDER()
  4464. SEEK UPPER(m.objname+m.objlib)
  4465. IF EOF()
  4466.   =warning(m.c_insobj,m.match_str)
  4467.   SET ORDER TO (m.lastorder)
  4468.   SELECT SCXDATA
  4469.   RETURN .F.
  4470. ENDIF
  4471. IF .NOT.EOF().AND.OBJTYPE#1.AND.OBJTYPE#2.AND.OBJTYPE#10
  4472.   m.row_offset=ROW-VPOS
  4473.   m.col_offset=COL-HPOS
  4474.   RELEASE a_fields
  4475.   DIMENSION a_fields(1)
  4476.   =AFIELDS(a_fields)
  4477.   SCATTER TO a_fscatter MEMO
  4478.   SELECT SCXDATA
  4479.   =insblank()
  4480.   IF ALEN(a_fscatter)=(FCOUNT()-m.fcountadj)
  4481.     GATHER FROM a_fscatter MEMO
  4482.   ELSE
  4483.     m.lastexac=SET('EXACT')
  4484.     SET EXACT ON
  4485.     FOR m.i = 1 TO (FCOUNT()-m.fcountadj)
  4486.       m.j=ASCAN(a_fields,FIELD(m.i))
  4487.       IF m.j=0
  4488.         LOOP
  4489.       ENDIF
  4490.       REPLACE (FIELD(m.i)) WITH a_fscatter(INT(m.j/4)+1)
  4491.     ENDFOR
  4492.     IF m.lastexac=='ON'
  4493.       SET EXACT ON
  4494.     ELSE
  4495.       SET EXACT OFF
  4496.     ENDIF
  4497.   ENDIF
  4498.   REPLACE VPOS WITH VPOS+m.row_offset, HPOS WITH HPOS+m.col_offset,;
  4499.                     ACTIVTYPE WITH 2
  4500.   IF TYPE('PLATFORM')=='C'
  4501.     REPLACE PLATFORM WITH m.platform_
  4502.   ENDIF
  4503.   IF ATC(m.c_basobj,COMMENT)=0
  4504.     =basobj2('')
  4505.   ENDIF
  4506.   IF TYPE('m.memvarmode')=='L'.AND.m.memvarmode
  4507.     m.old_text=ALLTRIM(MLINE(NAME,1))
  4508.     m.at_pos=AT('.',m.old_text)
  4509.     m.new_text='m'+SUBSTR(m.old_text,m.at_pos)
  4510.     IF m.at_pos>0.AND.(m.at_pos#2.OR.;
  4511.        .NOT.UPPER(LEFT(m.old_text,2))=='M.').AND.;
  4512.        .NOT.m.old_text==m.new_text
  4513.       REPLACE NAME WITH m.new_text,;
  4514.               WHEN WITH strtranc(WHEN,m.old_text,m.new_text),;
  4515.               VALID WITH strtranc(VALID,m.old_text,m.new_text),;
  4516.               MESSAGE WITH strtranc(MESSAGE,m.old_text,m.new_text),;
  4517.               ERROR WITH strtranc(ERROR,m.old_text,m.new_text),;
  4518.               RANGELO WITH strtranc(RANGELO,m.old_text,m.new_text),;
  4519.               RANGEHI WITH strtranc(RANGEHI,m.old_text,m.new_text)
  4520.     ENDIF
  4521.   ENDIF
  4522.   IF .NOT.EMPTY(m.trntxt_str)
  4523.     REPLACE COMMENT WITH m.trntxt_str+COMMENT
  4524.   ENDIF
  4525.   RELEASE a_fscatter
  4526.   SKIP -1
  4527. ELSE
  4528.   =warning(m.c_insobj,m.match_str)
  4529. ENDIF
  4530. SELECT FOXSCX
  4531. SET ORDER TO (m.lastorder)
  4532. LOCATE
  4533. SELECT SCXDATA
  4534. RETURN .T.
  4535.  
  4536. * END insobj
  4537.  
  4538.  
  4539.  
  4540. FUNCTION insscx
  4541. PARAMETERS m.scxname,m.deldirect
  4542. PRIVATE m.scxname,m.deldirect,m.r,m.row,m.col,m.rows,m.cols
  4543. PRIVATE m.row_offset,m.col_offset,m.lastexac,m.i,m.j,m.old_text,m.new_text
  4544. PRIVATE m.memline,m.at_pos,m.at_line,m.trntxt_str
  4545.  
  4546. IF m.deldirect
  4547.   DELETE
  4548. ELSE
  4549.   =delobj1()
  4550. ENDIF
  4551. IF .NOT.'.'$m.scxname
  4552.   m.scxname=m.scxname+'.SCX'
  4553. ENDIF
  4554. IF .NOT.FILE(m.scxname)
  4555.   =warning(m.c_insscx,m.scxname)
  4556.   RETURN .F.
  4557. ENDIF
  4558. m.r=RECNO()
  4559. m.row=VPOS
  4560. m.col=HPOS
  4561. m.rows=INT(HEIGHT-1)
  4562. m.cols=INT(WIDTH-1)
  4563. m.trntxt_str=''
  4564. m.at_line=ATCLINE(m.c_trntxt,COMMENT)
  4565. IF m.at_line>0
  4566.   FOR m.i = m.at_line TO MEMLINES(COMMENT)
  4567.     m.memline=ALLTRIM(MLINE(COMMENT,m.i))
  4568.     IF m.i>m.at_line.AND..NOT.'*:'$m.memline
  4569.       m.at_pos=AT(m.cr,COMMENT,m.i)+1
  4570.       IF m.at_pos=1.OR.ATC(m.c_trntxt,SUBSTR(COMMENT,m.at_pos))=0
  4571.         EXIT
  4572.       ENDIF
  4573.       LOOP
  4574.     ENDIF
  4575.     m.at_pos=ATC(m.c_trntxt,m.memline)
  4576.     IF m.at_pos=1
  4577.       m.trntxt_str=m.trntxt_str+m.memline+m.cr_lf
  4578.     ENDIF
  4579.   ENDFOR
  4580. ENDIF
  4581. IF USED('SCXINSERT')
  4582.   SELECT SCXINSERT
  4583.   USE
  4584. ELSE
  4585.   SELECT 0
  4586. ENDIF
  4587. USE (m.scxname) ALIAS SCXINSERT
  4588. IF TYPE('PLATFORM')=='C'
  4589.   SET FILTER TO PLATFORM==m.platform_
  4590. ENDIF
  4591. LOCATE
  4592. m.row_offset=m.row-VPOS
  4593. m.col_offset=m.col-HPOS
  4594. SCAN ALL FOR OBJTYPE#1.AND.OBJTYPE#2.AND.OBJTYPE#10.AND.;
  4595.              INT(VPOS)<=m.rows.AND.INT(HPOS)<=m.cols
  4596.   RELEASE a_fields
  4597.   DIMENSION a_fields(1)
  4598.   =AFIELDS(a_fields)
  4599.   SCATTER TO a_fscatter MEMO
  4600.   SELECT SCXDATA
  4601.   =insblank()
  4602.   IF ALEN(a_fscatter)=FCOUNT()
  4603.     GATHER FROM a_fscatter MEMO
  4604.   ELSE
  4605.     m.lastexac=SET('EXACT')
  4606.     SET EXACT ON
  4607.     FOR m.i = 1 TO FCOUNT()
  4608.       m.j=ASCAN(a_fields,FIELD(m.i))
  4609.       IF m.j=0
  4610.         LOOP
  4611.       ENDIF
  4612.       REPLACE (FIELD(m.i)) WITH a_fscatter(INT(m.j/4)+1)
  4613.     ENDFOR
  4614.     IF m.lastexac=='ON'
  4615.       SET EXACT ON
  4616.     ELSE
  4617.       SET EXACT OFF
  4618.     ENDIF
  4619.   ENDIF
  4620.   RELEASE a_fields
  4621.   REPLACE VPOS WITH VPOS+m.row_offset, HPOS WITH HPOS+m.col_offset,;
  4622.           ACTIVTYPE WITH 2
  4623.   IF TYPE('PLATFORM')=='C'
  4624.     REPLACE PLATFORM WITH m.platform_
  4625.   ENDIF
  4626.   IF TYPE('m.memvarmode')=='L'.AND.m.memvarmode
  4627.     m.old_text=ALLTRIM(MLINE(NAME,1))
  4628.     m.at_pos=AT('.',m.old_text)
  4629.     IF m.at_pos>0.AND.(m.at_pos#2.OR.;
  4630.        .NOT.UPPER(LEFT(m.old_text,2))=='M.').AND.;
  4631.        .NOT.m.old_text==m.new_text
  4632.       REPLACE NAME WITH 'm'+SUBSTR(NAME,m.at_pos)
  4633.       m.new_text=ALLTRIM(MLINE(NAME,1))
  4634.       REPLACE WHEN WITH strtranc(WHEN,m.old_text,m.new_text),;
  4635.               VALID WITH strtranc(VALID,m.old_text,m.new_text),;
  4636.               MESSAGE WITH strtranc(MESSAGE,m.old_text,m.new_text),;
  4637.               ERROR WITH strtranc(ERROR,m.old_text,m.new_text),;
  4638.               RANGELO WITH strtranc(RANGELO,m.old_text,m.new_text),;
  4639.               RANGEHI WITH strtranc(RANGEHI,m.old_text,m.new_text)
  4640.     ENDIF
  4641.   ENDIF
  4642.   IF .NOT.EMPTY(m.trntxt_str)
  4643.     REPLACE COMMENT WITH m.trntxt_str+COMMENT
  4644.   ENDIF
  4645.   SELECT SCXINSERT
  4646. ENDSCAN
  4647. RELEASE a_fscatter
  4648. USE IN SCXINSERT
  4649. SELECT SCXDATA
  4650. GOTO m.r
  4651. RETURN .T.
  4652.  
  4653. * END insscx
  4654.  
  4655.  
  4656.  
  4657. FUNCTION defobj1
  4658. PARAMETERS m.objname
  4659. PRIVATE m.objname
  4660.  
  4661. IF TYPE('SETUPCODE')#'M'
  4662.   RETURN .F.
  4663. ENDIF
  4664. REPLACE SETUPCODE WITH m.c_defobj+' '+m.objname+m.cr_lf+SETUPCODE
  4665. RETURN .T.
  4666.  
  4667. * END defobj1
  4668.  
  4669.  
  4670.  
  4671. FUNCTION defobj2
  4672. PARAMETERS m.objname
  4673. PRIVATE m.objname
  4674.  
  4675. IF TYPE('COMMENT')#'M'
  4676.   RETURN .F.
  4677. ENDIF
  4678. REPLACE COMMENT WITH m.c_defobj+' '+m.objname+m.cr_lf+COMMENT
  4679. RETURN .T.
  4680.  
  4681. * END defobj2
  4682.  
  4683.  
  4684.  
  4685. FUNCTION basobj1
  4686. PARAMETERS m.objname
  4687. PRIVATE m.objname
  4688.  
  4689. IF TYPE('SETUPCODE')#'M'
  4690.   RETURN .F.
  4691. ENDIF
  4692. REPLACE SETUPCODE WITH SETUPCODE+m.cr_lf+m.c_basobj+' '+m.objname
  4693. RETURN .T.
  4694.  
  4695. * END basobj1
  4696.  
  4697.  
  4698.  
  4699. FUNCTION basobj2
  4700. PARAMETERS m.objname
  4701. PRIVATE m.objname
  4702.  
  4703. IF TYPE('COMMENT')#'M'
  4704.   RETURN .F.
  4705. ENDIF
  4706. REPLACE COMMENT WITH COMMENT+m.cr_lf+m.c_basobj+' '+m.objname
  4707. RETURN .T.
  4708.  
  4709. * END basobj2
  4710.  
  4711.  
  4712.  
  4713. FUNCTION delobj1
  4714.  
  4715. IF TYPE('SETUPCODE')#'M'
  4716.   RETURN .F.
  4717. ENDIF
  4718. REPLACE SETUPCODE WITH m.c_delete+m.cr_lf+SETUPCODE
  4719. RETURN .T.
  4720.  
  4721. * END delobj1
  4722.  
  4723.  
  4724.  
  4725. FUNCTION delobj2
  4726.  
  4727. IF TYPE('COMMENT')#'M'
  4728.   RETURN .F.
  4729. ENDIF
  4730. REPLACE COMMENT WITH m.c_delete+m.cr_lf+COMMENT
  4731. RETURN .T.
  4732.  
  4733. * END delobj2
  4734.  
  4735.  
  4736.  
  4737. FUNCTION instxt1
  4738. PARAMETERS m.textstr,m.skiprec
  4739. PRIVATE m.textstr,m.skiprec,m.r
  4740.  
  4741. IF TYPE('SETUPCODE')#'M'.OR.RECNO()<m.r_scxdata
  4742.   RETURN .F.
  4743. ENDIF
  4744. m.r=RECNO()
  4745. IF TYPE('m.skiprec')#'N'
  4746.   m.skiprec=0
  4747. ENDIF
  4748. IF m.skiprec#0
  4749.   IF .NOT.insrec(m.skiprec)
  4750.     RETURN .F.
  4751.   ENDIF
  4752. ENDIF
  4753. REPLACE SETUPCODE WITH SETUPCODE+m.cr_lf+m.c_instxt+m.cr_lf+m.textstr
  4754. GOTO m.r
  4755. IF m.skiprec<0
  4756.   SKIP
  4757. ENDIF
  4758. RETURN .T.
  4759.  
  4760. * END instxt1
  4761.  
  4762.  
  4763.  
  4764. FUNCTION instxt2
  4765. PARAMETERS m.textstr,m.skiprec
  4766. PRIVATE m.textstr,m.skiprec,m.r
  4767.  
  4768. IF TYPE('COMMENT')#'M'.OR.RECNO()<m.r_scxdata
  4769.   RETURN .F.
  4770. ENDIF
  4771. m.r=RECNO()
  4772. IF TYPE('m.skiprec')#'N'
  4773.   m.skiprec=0
  4774. ENDIF
  4775. IF m.skiprec#0
  4776.   IF .NOT.insrec(m.skiprec)
  4777.     RETURN .F.
  4778.   ENDIF
  4779. ENDIF
  4780. REPLACE COMMENT WITH COMMENT+m.cr_lf+m.c_instxt+m.cr_lf+m.textstr
  4781. GOTO m.r
  4782. IF m.skiprec<0
  4783.   SKIP
  4784. ENDIF
  4785. RETURN .T.
  4786.  
  4787. * END instxt2
  4788.  
  4789.  
  4790.  
  4791. FUNCTION clrtxt1
  4792.  
  4793. IF TYPE('SETUPCODE')#'M'.OR.RECNO()<m.r_scxdata
  4794.   RETURN .F.
  4795. ENDIF
  4796. REPLACE SETUPCODE WITH ''
  4797. RETURN .T.
  4798.  
  4799. * END clrtxt1
  4800.  
  4801.  
  4802.  
  4803. FUNCTION clrtxt2
  4804.  
  4805. IF TYPE('COMMENT')#'M'.OR.RECNO()<m.r_scxdata
  4806.   RETURN .F.
  4807. ENDIF
  4808. REPLACE COMMENT WITH ''
  4809. RETURN .T.
  4810.  
  4811. * END clrtxt2
  4812.  
  4813.  
  4814.  
  4815. FUNCTION insif1
  4816. PARAMETERS m.textstr
  4817. PRIVATE m.textstr,m.sayrefresh
  4818.  
  4819. m.sayrefresh=REFRESH
  4820. IF TYPE('SETUPCODE')#'M'.OR.TYPE('m.textstr')#'C'.OR.EMPTY(m.textstr).OR.;
  4821.    .NOT.instxt1('IF '+m.textstr,-1)
  4822.   RETURN .F.
  4823. ENDIF
  4824. IF instxt1('ENDIF',1)
  4825.   SKIP -1
  4826.   REPLACE NEXT 3 REFRESH WITH m.sayrefresh
  4827.   SKIP -1
  4828.   RETURN .T.
  4829. ENDIF
  4830. RETURN .F.
  4831.  
  4832. * END insif1
  4833.  
  4834.  
  4835.  
  4836. FUNCTION insif2
  4837. PARAMETERS m.textstr
  4838. PRIVATE m.textstr,m.sayrefresh
  4839.  
  4840. m.sayrefresh=REFRESH
  4841. IF TYPE('COMMENT')#'M'.OR.TYPE('m.textstr')#'C'.OR.EMPTY(m.textstr).OR.;
  4842.    .NOT.instxt2('IF '+m.textstr,-1)
  4843.   RETURN .F.
  4844. ENDIF
  4845. IF instxt2('ENDIF',1)
  4846.   SKIP -1
  4847.   REPLACE NEXT 3 REFRESH WITH m.sayrefresh
  4848.   SKIP -1
  4849.   RETURN .T.
  4850. ENDIF
  4851. RETURN .F.
  4852.  
  4853. * END insif2
  4854.  
  4855.  
  4856.  
  4857. FUNCTION size1
  4858. PARAMETERS m.textstr
  4859. PRIVATE m.textstr
  4860.  
  4861. IF TYPE('SETUPCODE')#'M'
  4862.   RETURN .F.
  4863. ENDIF
  4864. IF TYPE('m.textstr')#'C'.OR.EMPTY(m.textstr)
  4865.   REPLACE SETUPCODE WITH m.c_nosize+m.cr_lf+SETUPCODE
  4866. ELSE
  4867.   REPLACE SETUPCODE WITH m.c_size+' '+m.textstr+m.cr_lf+SETUPCODE
  4868. ENDIF
  4869. RETURN .T.
  4870.  
  4871. * END size1
  4872.  
  4873.  
  4874.  
  4875. FUNCTION size2
  4876. PARAMETERS m.textstr
  4877. PRIVATE m.textstr
  4878.  
  4879. IF TYPE('COMMENT')#'M'
  4880.   RETURN .F.
  4881. ENDIF
  4882. IF TYPE('m.textstr')#'C'.OR.EMPTY(m.textstr)
  4883.   REPLACE COMMENT WITH m.c_nosize+m.cr_lf+COMMENT
  4884. ELSE
  4885.   REPLACE COMMENT WITH m.c_size+' '+m.textstr+m.cr_lf+COMMENT
  4886. ENDIF
  4887. RETURN .T.
  4888.  
  4889. * END size2
  4890.  
  4891.  
  4892.  
  4893. FUNCTION default1
  4894. PARAMETERS m.textstr
  4895. PRIVATE m.textstr
  4896.  
  4897. IF TYPE('SETUPCODE')#'M'.OR.TYPE('m.textstr')#'C'.OR.EMPTY(m.textstr)
  4898.   RETURN .F.
  4899. ENDIF
  4900. REPLACE SETUPCODE WITH m.c_default+' '+m.textstr+m.cr_lf+SETUPCODE
  4901. RETURN .T.
  4902.  
  4903. * END default1
  4904.  
  4905.  
  4906.  
  4907. FUNCTION default2
  4908. PARAMETERS m.textstr
  4909. PRIVATE m.textstr
  4910.  
  4911. IF TYPE('COMMENT')#'M'.OR.TYPE('m.textstr')#'C'.OR.EMPTY(m.textstr)
  4912.   RETURN .F.
  4913. ENDIF
  4914. REPLACE COMMENT WITH m.c_default+' '+m.textstr+m.cr_lf+COMMENT
  4915. RETURN .T.
  4916.  
  4917. * END default2
  4918.  
  4919.  
  4920.  
  4921. FUNCTION delrec
  4922.  
  4923. DELETE
  4924. RETURN .T.
  4925.  
  4926. * END delrec
  4927.  
  4928.  
  4929.  
  4930. FUNCTION drvobj
  4931.  
  4932. DO CASE
  4933.   CASE RECNO()<m.r_scxdata
  4934.     RETURN .F.
  4935.   CASE DELETED()
  4936.     RETURN .F.
  4937. ENDCASE
  4938. RETURN .T.
  4939.  
  4940. * drvobj
  4941.  
  4942.  
  4943.  
  4944. FUNCTION drvenable
  4945. PARAMETERS m.prog_name
  4946. PRIVATE m.prog_name,m.var_name
  4947.  
  4948. m.var_name='_'+UPPER(m.prog_name)
  4949. IF IIF(TYPE('EVALUATE(m.var_name)')=='C',EVALUATE(m.var_name),;
  4950.    configfp(m.prog_name,'ON'))=='OFF'
  4951.   RETURN .F.
  4952. ENDIF
  4953. RETURN .T.
  4954.  
  4955. * drvenable
  4956.  
  4957.  
  4958.  
  4959. FUNCTION objsay
  4960.  
  4961. RETURN '@ '+objpos()+' SAY '+EXPR
  4962.  
  4963. * END objsay
  4964.  
  4965.  
  4966.  
  4967. FUNCTION objpos
  4968.  
  4969. IF INLIST(ALLTRIM(m.platform_),'WINDOWS','MAC')
  4970.   RETURN ALLTRIM(STR(VPOS,7,3))+','+ALLTRIM(STR(HPOS,7,3))
  4971. ENDIF
  4972. RETURN ALLTRIM(STR(VPOS,3))+','+ALLTRIM(STR(HPOS,3))
  4973.  
  4974. * END objpos
  4975.  
  4976.  
  4977.  
  4978. FUNCTION objdata
  4979. PARAMETERS m.match_str,m.eval_str
  4980. PRIVATE m.match_str,m.eval_str,m.new_str,m.mthd_str,m.at_pos,m.r
  4981.  
  4982. m.new_str=''
  4983. IF '.'$m.match_str.OR..NOT.USED('SCXDATA')
  4984.   RETURN libdata(m.match_str,m.eval_str)
  4985. ENDIF
  4986. m.match_str=PADR(CHRTRAN(ALLTRIM(m.match_str),m.badchars,m.stdascii),24)
  4987. m.r=RECNO()
  4988. GOTO m.r_scxdata
  4989. LOCATE REST FOR PADR(CHRTRAN(wordsearch(m.c_defobj),;
  4990.                 m.badchars,m.stdascii),24)==m.match_str
  4991. IF EOF()
  4992.   IF TYPE('m.evlmode')=='L'.AND.m.evlmode
  4993.     m.new_str=libdata(m.match_str,m.eval_str)
  4994.   ELSE
  4995.     =warning('objdata()',m.match_str)
  4996.   ENDIF
  4997. ELSE
  4998.   IF TYPE('m.eval_str')#'C'.OR.EMPTY(m.eval_str).OR.;
  4999.      UPPER(m.eval_str)=='COMMENT'
  5000.     m.eval_str=m.eval_cmnt
  5001.   ENDIF
  5002.   IF '::'$m.eval_str
  5003.     m.at_pos=AT('::',m.eval_str)
  5004.     m.mthd_str=SUBSTR(m.eval_str,m.at_pos+2)
  5005.     m.eval_str=LEFT(m.eval_str,m.at_pos-1)
  5006.     IF EMPTY(m.eval_str)
  5007.       m.eval_str=m.eval_cmnt
  5008.     ENDIF
  5009.     m.new_str=EVALUATE(m.eval_str)
  5010.     m.at_pos=ATC(m.c_method+' '+m.mthd_str+m.cr,m.new_str+m.cr)
  5011.     IF m.at_pos=0
  5012.       =warning('objdata()',m.match_str+'::'+m.eval_str+'::'+m.mthd_str)
  5013.       m.new_str=''
  5014.     ELSE
  5015.       m.new_str=SUBSTR(m.new_str,m.at_pos)
  5016.       m.at_pos=ATC(m.c_endmthd,m.new_str)
  5017.       IF m.at_pos>0
  5018.         m.new_str=LEFT(m.new_str,m.at_pos+LEN(m.c_endmthd)-1)
  5019.       ENDIF
  5020.       m.new_str=m.new_str+m.cr_lf
  5021.     ENDIF
  5022.   ELSE
  5023.     m.new_str=EVALUATE(m.eval_str)
  5024.   ENDIF
  5025. ENDIF
  5026. GOTO m.r
  5027. RETURN m.new_str
  5028.  
  5029. * END objdata
  5030.  
  5031.  
  5032.  
  5033. FUNCTION libdata
  5034. PARAMETERS m.match_str,m.eval_str
  5035. PRIVATE m.match_str,m.eval_str,m.new_str,m.mthd_str,m.at_pos,m.i
  5036. PRIVATE m.objlib,m.objname,m.lstselect,m.lstorder,m.lstexac
  5037.  
  5038. m.new_str=''
  5039. m.lstselect=SELECT()
  5040. IF .NOT.openfoxscx()
  5041.   RETURN m.new_str
  5042. ENDIF
  5043. m.objlib=''
  5044. m.objname=PADR(ALLTRIM(m.match_str),LEN(FOXSCX.OBJLIB_)+LEN(FOXSCX.OBJNAME_))
  5045. m.at_pos=AT('.',m.objname)
  5046. IF m.at_pos>0
  5047.   m.objlib=PADR(UPPER(CHRTRAN(ALLTRIM(LEFT(m.objname,m.at_pos-1)),;
  5048.             m.badchars,m.stdascii)),LEN(FOXSCX.OBJLIB_))
  5049.   m.objname=ALLTRIM(SUBSTR(m.objname,m.at_pos+1))
  5050. ENDIF
  5051. IF TYPE('m.inclibs')#'N'
  5052.   m.inclibs=0
  5053. ENDIF
  5054. IF m.inclibs=0.AND.EMPTY(m.objlib)
  5055.   =warning('libdata()',m.match_str)
  5056.   RETURN m.new_str
  5057. ENDIF
  5058. m.objname=PADR(CHRTRAN(m.objname,m.badchars,m.stdascii),;
  5059.            LEN(FOXSCX.OBJNAME_))
  5060. SELECT FOXSCX
  5061. m.lstorder=ORDER()
  5062. SET ORDER TO OBJNAME_
  5063. IF EMPTY(m.objlib)
  5064.   m.lstexac=SET('EXACT')
  5065.   SET EXACT ON
  5066.   FOR m.i = 1 TO m.inclibs
  5067.     SEEK UPPER(PADR(m.objname,LEN(OBJNAME_))+PADR(a_inclib(m.i),LEN(OBJLIB_)))
  5068.     IF .NOT.EOF()
  5069.       m.objlib=OBJLIB_
  5070.       EXIT
  5071.     ENDIF
  5072.   ENDFOR
  5073.   IF m.lstexac=='ON'
  5074.     SET EXACT ON
  5075.   ELSE
  5076.     SET EXACT OFF
  5077.   ENDIF
  5078. ENDIF
  5079. SEEK UPPER(m.objname+m.objlib)
  5080. IF EOF()
  5081.   =warning('libdata()',m.match_str)
  5082. ELSE
  5083.   IF TYPE('m.eval_str')#'C'.OR.EMPTY(m.eval_str).OR.;
  5084.      UPPER(m.eval_str)=='COMMENT'
  5085.     m.eval_str=m.eval_cmnt
  5086.   ENDIF
  5087.   IF '::'$m.eval_str
  5088.     m.at_pos=AT('::',m.eval_str)
  5089.     m.mthd_str=SUBSTR(m.eval_str,m.at_pos+2)
  5090.     m.eval_str=LEFT(m.eval_str,m.at_pos-1)
  5091.     IF EMPTY(m.eval_str)
  5092.       m.eval_str=m.eval_cmnt
  5093.     ENDIF
  5094.     m.new_str=EVALUATE(m.eval_str)
  5095.     m.at_pos=ATC(m.c_method+' '+m.mthd_str+m.cr,m.new_str+m.cr)
  5096.     IF m.at_pos=0
  5097.       =warning('libdata()',m.match_str+'::'+m.eval_str+'::'+m.mthd_str)
  5098.       m.new_str=''
  5099.     ELSE
  5100.       m.new_str=SUBSTR(m.new_str,m.at_pos)
  5101.       m.at_pos=ATC(m.c_endmthd,m.new_str)
  5102.       IF m.at_pos>0
  5103.         m.new_str=LEFT(m.new_str,m.at_pos+LEN(m.c_endmthd)-1)+m.cr_lf
  5104.       ENDIF
  5105.     ENDIF
  5106.   ELSE
  5107.     m.new_str=EVALUATE(m.eval_str)
  5108.   ENDIF
  5109. ENDIF
  5110. SET ORDER TO (m.lstorder)
  5111. LOCATE
  5112. SELECT (m.lstselect)
  5113. RETURN m.new_str
  5114.  
  5115. * END libdata
  5116.  
  5117.  
  5118.  
  5119. FUNCTION insert
  5120. PARAMETERS m.filename
  5121. PRIVATE m.filename,m.lstselect
  5122.  
  5123. IF .NOT.FILE(m.filename)
  5124.   =warning('insert()',m.filename)
  5125.   RETURN ''
  5126. ENDIF
  5127. m.lstselect=SELECT()
  5128. IF USED('INSERTFILE')
  5129.   SELECT INSERTFILE
  5130.   LOCATE
  5131. ELSE
  5132.   CREATE CURSOR INSERTFILE (FILEINFO M)
  5133.   SELECT INSERTFILE
  5134.   INSERT BLANK
  5135. ENDIF
  5136. APPEND MEMO FILEINFO FROM (m.filename) OVERWRITE
  5137. SELECT (m.lstselect)
  5138. RETURN INSERTFILE.FILEINFO
  5139.  
  5140. * END insert
  5141.